Пытаюсь передать функцию обратно в App.js и застреваю в REACT

#html #reactjs #components #jsx

#HTML #reactjs #Компоненты #jsx

Вопрос:

У меня есть приложение, которое позволяет мне добавлять список клиентов по вводимым данным. У меня также есть другой компонент, который позволяет мне выбрать один из существующих клиентов из выпадающего меню и создать с ними «новый урок». Таким образом, я могу регистрировать свои уроки, выполненные с моими клиентами. Все это работает отлично… вот где я застрял.

Каждый раз, когда я добавляю новый урок, я хочу взять продолжительность урока (в часах) и умножить это на цену соответствующего клиента. Затем я хочу иметь возможность отображать эту прибыль, и каждый раз, когда я добавляю новый урок с новой прибылью, я хочу, чтобы все это составляло общую прибыль от всех уроков.

Это App.js

 import React, { Component } from 'react'
import Clients from './components/Clients'
import AddClient from './components/AddClient'
import NavBar from './components/NavBar'
import AddLesson from './components/AddLesson'
import CalculateIncome from './components/CalculateIncome'

class App extends Component {
  state = {
    clients : [
      // {id : null , name : '', price : null}
    ],
    lessons : [
      // {id: null, name: '', time: null, date :null}
    ],
  }

  deleteClient = (id) => {
    let clients = this.state.clients.filter(client => {
      return client.id !== id
    })
    this.setState({
      clients: clients
    })
  }

  addClient = (newClient) => {
    newClient.id = Math.random();
    let clients = [...this.state.clients, newClient];
    clients.sort((a, b) => a.name.localeCompare(b.name))
    this.setState({
        clients: clients,
    })
  }

  addLesson = (newLesson) => {
    newLesson.id = Math.random();
    newLesson.date = Date();
    let lessons = [...this.state.lessons, newLesson];
    this.setState({
        lessons: lessons,
    })
  }

  render() {
    return (
      <div className="App">
        <NavBar/>
        <Clients clients={this.state.clients} deleteClient={this.deleteClient} lessons={this.state.lessons}/>
        <AddClient addClient={this.addClient}/>
        <AddLesson addLesson={this.addLesson} lessons={this.state.lessons} clients={this.state.clients} income={this.state.income} />
        <CalculateIncome lessons={this.state.lessons} clients={this.state.clients}/>
      </div>
    );
  }
}

export default App;
  

Это CalculateIncome.js

 import React, {Component} from 'react'

class CalculateIncome extends Component {
        state = {
            totalIncome:0
        }

        calculation = () => {
            this.props.lessons.filter(lesson => {
                this.props.clients.filter(client => {
                    if (client.name === lesson.name){
                        let price = client.price
                        let time = lesson.time
                        return(price, time)
                    }
                    return (
                        this.setState({
                            totalIncome : (price * time)
                        })
                    )
                })       
            })
        }

        render() {
            return ( this.props.lessons.length ? 
            (this.state.totalIncome)  
                : 
            (<div className="text-center my-5">You are broke</div>) 
        )
    }
}

export default CalculateIncome
  

Если вам нужно увидеть какие-либо другие компоненты, включая AddLesson.js и Clients.js пожалуйста, дайте мне знать, я также опубликую это.

Комментарии:

1. Извините, но в чем именно заключается ваш вопрос?

2. У меня есть несколько компонентов: App.js , Clients.js , AddClient.js AddLesson.js, и CalculateIncome.js. Я могу добавлять клиентов и использовать эти существующие клиенты для добавления урока, соответствующего каждому клиенту. У каждого урока есть продолжительность, и у каждого клиента есть цена за час. Я хочу создать функцию, которая будет умножаться (урок.время * клиент.цена), чтобы я мог знать свой доход. Мой вопрос в том, куда бы я поместил эту функцию, поместил бы я ее прямо в App.js или в AddLesson.js или это было бы просто его собственное вычисление в CalculateIncome.js и как бы я передал эти свойства вверх и вниз по компонентам?