试图将函数传递回App.js并卡住REACT

时间:2019-03-07 20:17:12

标签: html reactjs components jsx

我有一个应用程序,允许我通过输入添加客户列表。我还有另一个组件,允许我从下拉菜单中选择一个现有的客户端,并与他们一起创建“新课程”。这样,我可以记录与客户一起完成的课程。一切都完美运行...这就是我遇到的问题。

每次添加新课程时,我都希望将课程持续时间(以小时为单位)乘以相应客户的价格。然后,我希望能够显示该利润,并且每当我添加新课程并获得新利润时,我都希望它们全部加起来成为所有课程的totalProfit。

这是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,请告诉我,我也将其发布。

0 个答案:

没有答案