Dan*_*ama 7 state reactjs react-native
我componentDidUpdate()过去曾经使用它并且按预期工作.
然而,这一次,我做到了
componentDidUpdate(prevProps, prevState) {
if (prevState.object.someString !== this.state.object.someString) {
console.log(true);
}
}
Run Code Online (Sandbox Code Playgroud)
并且true从不记录.我将两个状态对象记录到控制台,发现它们完全相同:当前状态.
这是一个错误吗?我在这里错过了什么?
谢谢.
编辑:我尝试用同样的东西componentWillUpdate(nextProps, nextState)再做一次,它们是同一个对象.
编辑2:我正在改变状态:
modifyObject = (field, value) => {
const { object } = this.state;
object[field] = value;
this.setState({ object });
}
Run Code Online (Sandbox Code Playgroud)
Ice*_*kle 14
在添加的代码中,您通过仅更改对象上的属性来改变引用对象.这意味着最终nextProps并且previousProps实质上指的是相同的参考.
因此,您componentDidUpdate没有发现任何差异也就不足为奇了.
你应该做的是创建一个新版本的对象,并使用它来设置状态,如:
this.setState({ object: { ...object, [field]: value } })
Run Code Online (Sandbox Code Playgroud)
或者,如果你没有传播运营商,那就像
this.setState( { object: Object.assign({}, object, { [field]: value }) } );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9880 次 |
| 最近记录: |