componentDidUpdate中的prevState是currentState吗?

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)