Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 超出最大调用堆栈大小React Redux_Javascript_Reactjs_Redux_React Redux - Fatal编程技术网

Javascript 超出最大调用堆栈大小React Redux

Javascript 超出最大调用堆栈大小React Redux,javascript,reactjs,redux,react-redux,Javascript,Reactjs,Redux,React Redux,我的错误超过了最大调用堆栈大小。也许我错误地理解了组件diddupdate,但它不应该运行一次,而应该运行1000次。如何修复它 类应用程序扩展组件{ 建造师(道具){ 超级(道具); 此.state={ 金额:0 } } updateOut(){ 设数=0; this.props.comments.map((注释,索引)=>{ if(comment.replyTo==null){ 数字+=1; this.setState({amount:number}); } 返回null; }); } 组

我的错误
超过了最大调用堆栈大小
。也许我错误地理解了
组件diddupdate
,但它不应该运行一次,而应该运行1000次。如何修复它

类应用程序扩展组件{
建造师(道具){
超级(道具);
此.state={
金额:0
}
}
updateOut(){
设数=0;
this.props.comments.map((注释,索引)=>{
if(comment.replyTo==null){
数字+=1;
this.setState({amount:number});
}
返回null;
});
}
组件willmount(){
this.updateOut();
}
componentDidUpdate(){
this.updateOut();
}
render(){
console.log(this.state.amount);
返回(
|
|
6评论
更多
)//返回
}//渲染

}//App
每次在
componentDidUpdate
中修改状态时,都会异步抛出重新渲染。 在方法
updateAmount
中,您正在修改状态。
您在
componentdiddupdate
中调用该方法,因此您启动了一个无限的重新渲染循环,因此创建的这个无休止的循环最终会浪费javascript内存

更新状态时的反应周期如下。所以你很容易理解为什么你会进入一个无休止的循环。
我找到了我问题的答案。我需要使用
nextrops
参数和方法
componentWillUpdate
而不是
componentdiddupdate
方法

//之前
componentDidUpdate(){
this.updateOut();
}
//之后
组件将更新(下一步){
if(!\ isEqual(this.props,nextrops)){
this.updateOut();
}

}
componentWillMount
将强制执行更新,该更新将触发
componentdiddupdate
,该更新将再次强制执行更新,依此类推。
componentdiddupdate()
是一个回调,用于通知您状态更新已成功完成。您不应该在此处触发另一个状态更新。如何修复它?在javascript事件(例如单击)后执行
updateAmount
,然后重新执行一些逻辑。您还可以使用
shouldComponentUpdate
检查是否可以执行重新渲染,尽管这对性能不好。@RamzanChasygov您想实现什么?