javascript - setState 在从嵌套子功能组件更新状态时出错
问题描述
我试图不止一次更新状态。我怎样才能做到这一点。我在其他网站上看到过以下方法,但无法使用。
componentDidUpdate(prevProps, prevState)
错误:错误:超出最大更新深度。当组件在 componentWillUpdate 或 componentDidUpdate 中重复调用 setState 时,可能会发生这种情况。React 限制了嵌套更新的数量以防止无限循环。
state={
incobj:[],
expenobj:[],
totalinc:0,
totalexp:0,
click:0
}
takeInp=(e)=>{
if(e[0]==="Income"){
this.setState({
incobj:this.state.incobj.concat( [e]),
totalinc:this.state.totalinc+parseInt(e[2])
})
}
if(e[0]==="Expense"){
this.setState({
expenobj:this.state.expenobj.concat( [e]),
totalexp:this.state.totalexp+parseInt(e[2])
})
}
}
deldata=(d)=>{
let num=parseInt( d.substr(1,d.length));
if(d.charAt(0)==="i"){
this.setState({
click:this.state.click+1
})
console.log(this.state.click, 'increased')
}
if(d.charAt(0)==="e"){
this.setState({
click:this.state.click+1
})
console.log(this.state.click, 'increased')
}
}
解决方案
这是由无限循环引起的。您的App
组件是父组件,并将更新父组件Income
的方法传递给它deldata
。子功能组件具有在每次渲染时执行的这段代码:
if (Remov) {
props.todel(Remov);
}
当Remov
为真时,它会更新父级的状态。这会导致孩子的重新渲染。这会更新父级的状态。ETC...
不要todel
在你的功能组件中触发,即使是有条件的也不行。仅在响应某些事件(onClick 等)时调用它。
推荐阅读
- r - 如何将函数应用于 tidyverse 中的 colnames
- java - 如何在java程序中设置JVM参数值
- java - 使用数组的文本到图像
- vue-component - 将放大/缩小移动到左上角以外的其他位置
- java - 如何以编程方式在 Java 中获取 Kafka 集群和代理信息?
- javascript - 数据库事务并行发生而不是循环顺序发生
- ruby-on-rails - 如何在 Rails 控制器本身中返回压缩的 json 数据?
- sql - 运行最新日期记录
- javascript - 在 javascript 中正确组织类
- solr - Solr同义词图过滤器在其他过滤器之后不起作用