更新时React Redux调度导致递归错误
React Redux dispatch on update causes recursion error
我正在使用React(14.2)和Redux。我已经设置好了所有的东西并能正常工作,除了当我在更新时调度一个操作时,会发生递归循环。
componentWillMount() {
const { wizardActions, valid, errors } = this.props
wizardActions.setPropState({valid: valid, errors: errors})
}
componentWillUpdate(nextProps) {
const { wizardActions } = this.props
console.log('NP', nextProps)
//*** IF I UNCOMMENT THE FOLLWOING LINES THE APP GOES INTO AN INFINTIE
// RECURSION LOOP...
/*if(this.props !== nextProps) {
wizardActions.setPropState({valid: nextProps.valid, errors: nextProps.errors})
}*/
}
当前组件的道具发生更改时,如何更新Redux状态?我也在componentWillReceiveProps()
中尝试过,它也做了同样的事情。
TIA!
当外部因素(如React Router)导致道具更改时,可以调度操作来响应道具更改。但是,您似乎希望调度操作以响应从Redux本身注入的道具的更改,这使其具有循环性。这不是你在Redux应该做的事情。
valid
和errors
来自哪里?如果它们由Redux管理,则无需在componentWillUpdate
中调度操作——当您收到新值时,它们已在Redux状态下更新。如果它们是由具有本地状态的父组件管理的,请首先考虑将该状态移动到Redux,而不是使用两个真相来源(组件和存储)来复制它。
一般来说,在你的应用程序中,任何给定状态的真相都应该只有一个来源。这个真相来源可以是Redux商店、React组件或一些外部来源,但您不应该试图在生命周期方法中同步几个真相来源。
OK-为了让这一切顺利进行,我将if
修改为prop-specific,如下所示:
componentWillUpdate(nextProps) {
const { wizardActions } = this.props
if(this.props.errors !== nextProps.errors) {
wizardActions.setPropState({valid: nextProps.valid, errors: nextProps.errors})
}
}
还有一些事情。。。
- 感谢所有的回复和其中一些的详细程度。。。正是@azium让我找到了一个行之有效的解决方案
- ComponentDidUpdate更多地用于DOM操作,而这不是我在这里所做的
- 关注的道具(有效和错误)由ReduxForm装饰器注入。ReduxForm确实将一些东西保持在Redux状态,但不是这些——它们实际上是注入的运行时道具
您不能使用componentDidUpdate
挂钩有什么原因吗
在React文档中,他们注意到不要在componentWillUpdate
中调用this.setState
以避免无限循环。Redux的dispatch
不是this.setState
,但它会引起同样的效果。
相关文章:
- 如何修复“;太多递归”;ReactJS中的错误
- jQuery setTimeout ajax递归函数在即时消息程序中短时间后抛出错误
- 更新时React Redux调度导致递归错误
- 树中的递归错误太多
- Javascript中的快速排序-错误过多的递归
- parseInt(x,10)导致最大调用堆栈/过多递归错误
- Chrome 未捕获范围错误:最大调用堆栈大小超出了点击递归
- 谷歌地图点击平移到新位置 递归错误太多
- JavaScript递归函数错误答案
- 主干/下划线 js “太多递归”和“检查目标崩溃”错误
- JavaScript递归函数中的错误
- Jquery 拆分器插件收到错误太多递归
- 递归 js v3 未捕获的类型错误:无法读取未定义的属性“配置”
- 内部错误:太多的递归 - 进入jquery
- 在尝试扩展javascript函数时,如何避免过多的递归错误
- Javascript递归错误-函数中的函数
- 太多的递归错误与facebook JavaScript SDK
- Jquery在点击中点击会导致很多递归错误
- 新闻提示:递归错误
- Angular js在调用$apply()时出现太多递归错误