反应出错:第 25 行:'totalIncome' 未定义 no-undef

Posted

技术标签:

【中文标题】反应出错:第 25 行:\'totalIncome\' 未定义 no-undef【英文标题】:getting error in react: Line 25: 'totalIncome' is not defined no-undef反应出错:第 25 行:'totalIncome' 未定义 no-undef 【发布时间】:2019-07-29 21:42:24 【问题描述】:
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 income = client.price * lesson.time;
                        let totalIncome = this.state.totalIncome + income
                        return(
                            totalIncome
                        )
                    
                    return (
                        this.setState(
                            totalIncome : totalIncome   //this is the error
                        )
                    )
                )      
                return (this.state.totalIncome)
            )
        

        render() 
            console.log(this.props.lessons, this.props.clients) //this checks out!
            return ( this.props.lessons.length ? 
            (
                <div onLoad=this.calculation>this.state.totalIncome</div>
            )  
                : 
            (<div className="text-center my-5">You are broke</div>) 
        )
    


export default CalculateIncome

来自 App.js 的道具正在正确加载,因为当我执行 console.log(); 时我可以看到它们出现了

此计算的总体目的是获取添加的新课程并在现有客户列表中运行它,并将课程的时间或持续时间与客户列出的价格相乘,这样我就可以获得收入。然后我想将个人收入添加到总收入中并显示出来。

我得到一个未定义的错误,或者如果我移动东西我得到一个“需要返回值”错误。我是新手,所以我很困惑。任何帮助将不胜感激,谢谢!如果您需要更多我的组件,请告诉我。

【问题讨论】:

将你的计算()移动到componentDidMount(),请参阅反应生命周期方法。(reactjs.org/docs/react-component.html#componentdidmount)你要做的是1.从app.js获取道具2.执行计算(CdM() ) 3. 基于计算的渲染错误是:你已经返回 this.setState(xyz)。但该方法不返回任何内容。 我不明白你想用“this.props.clients.filter”做什么,也许你应该使用reduce来只返回一个值。无论如何,我认为您在计算器上的 setState 中的“totalIncome”没有定义。 @EdisonJunior 我的思考过程是筛选每节课,每节课都会筛选现有客户列表,直到找到与相同名称匹配的客户。在那里我会做数学计算,然后将答案发回并将其添加到 totalIncome。 【参考方案1】:

我认为您根本不需要使用状态来进行此计算(如果您按照您尝试的方式进行操作,您的组件将为每个客户端课程匹配重新渲染。这是一个快速(未经测试)你可以这样做。

import React,  PureComponent  from 'react'

class CalculateIncome extends PureComponent 
        calculation = () => 
            const  lessons = [], clients = []  = this.props;
            let totalIncome = 0;
            lessons.forEach(lesson => 
                clients.forEach(client => 
                    if (client.name === lesson.name) 
                        totalIncome += client.price * lesson.time;
                    
                );
            );
            return totalIncome;
        

        render() 
            const  lessons  = this.props;

            if (lessons.length) 
                const totalIncome = this.calculation();
                return <div>totalIncome</div>;
            
            return <div className="text-center my-5">You are broke</div>;
        )
    


export default CalculateIncome;

【讨论】:

哦,天哪,这行得通,非常感谢!我已经被困了两天了。

以上是关于反应出错:第 25 行:'totalIncome' 未定义 no-undef的主要内容,如果未能解决你的问题,请参考以下文章

使用打字稿配置本机反应时出错

Android.view.InflateException:二进制 XML 文件第 25 行:膨胀类 ImageButton、Resource NotFoundException、XmlPullPar

使用 npm 链接符号链接反应模块以进行本地开发会出错

[机缘参悟-25]:鬼谷子-反应篇-钓语之术(诱饵隐蔽忍耐)

[机缘参悟-25]:鬼谷子-反应篇-钓语之术(诱饵隐蔽忍耐)

使用 jquery 动画时出错“第 13 行内存不足”