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您想实现什么?