从redux获取数据后,在使用componentWillReceiveProps更新组件本地对象之前。
componentWillReceiveProps(nextProps) {
if (nextProps.editUser && !nextProps.loading && !isEqual(this.state.user, nextProps.editUser)){
this.setState({user:{
name:nextProps.editUser.name,
email:nextProps.editUser.email,
}}, function(){
this.setState({addModalUserEdit:true});
});
}
}
但是现在我想按照React生命周期在react文档中使用shouldComponentUpdate和componentWillUpdate。
shouldComponentUpdate(nextProps, nextState){
if (nextProps.editUser && !nextProps.loading && !isEqual(this.state.user, nextProps.editUser)){
return true;
}
return false;
}
componentWillUpdate(nextProps, nextState) {
if (nextProps.editUser && !nextProps.loading && !isEqual(this.state.user, nextProps.editUser)){
this.setState({user:{
name:nextProps.editUser.name,
email:nextProps.editUser.email,
}}, function(){
this.setState({addModalUserEdit:true});
});
}
}
但是我产生一个错误
“已超过最大更新深度。当组件出现这种情况 重复调用componentWillUpdate内的setState或 componentDidUpdate。 React将嵌套更新的数量限制为 防止无限循环。”
请指导我在理解生命周期方面做错的事情。
谢谢。
答案 0 :(得分:0)
gksudo stdbuf -oL apt update | zenity --progress --pulsate --auto-close --auto-kill
在更新为状态之前运行(,这就是为什么它为您提供shouldComponentUpdate
作为属性的原因),因此在对{{1 }},您需要使用nextState
。
state
请记住,advised请勿在{{1}}中进行深度相等性检查,因为这会损害性能。
另外,nextState
(在最新版本中是 )被称为UNSAFE_componentWillUpdate
,它指出
请注意,您无法在此处致电
shouldComponentUpdate(nextProps, nextState){ if (nextProps.editUser && !nextProps.loading && !isEqual(nextState.user, nextProps.editUser)){ return true; } return false; }
;你也不应该做 会触发其他操作的任何其他操作(例如,调度Redux操作) 在UNSAFE_componentWillUpdate()之前更新到React组件 返回。
建议的方法是使用componentDidUpdate
。
答案 1 :(得分:0)
shouldComponentUpdate()
。
shouldComponentUpdate (nextProps) {
return nextProps !== this.props
}
componentDidUpdate()
在更新状态后立即被调用。
初始渲染均不调用这两种方法。
答案 2 :(得分:0)