ReactJS -检测状态变化的问题

ReactJS — problems with detecting changes in state

本文关键字:问题 变化 状态 检测 ReactJS      更新时间:2023-09-26

查看此示例:http://codepen.io/lzhelenin/pen/jVbeRg

有一个小的React应用程序,它的初始状态是这样的:

{
  foo: 123,
  bar: [{
    cux: 456
  }]
}

如果你按下按钮,它会添加一个处于状态的新对象。条并改变状态。foo的价值。然而,如果你按下它,然后看一下控制台,你会看到那个状态。前一状态的Bar和状态完全相同。新州的酒吧,尽管州。Foo是不同的。为什么会这样呢?

正如@Radio-提到的,_.clone创建了一个浅拷贝的克隆,所以prevcurr状态都指向同一个数组,所以你最好把你的clickHandler()方法调整成这样:

  clickHandler() {
    this.setState({
      foo: 999,
      bar: [
        ...this.state.bar,
        {cux: 123}
      ]
    });
  }

From http://underscorejs.org/#clone:

clone_.clone(object)创建提供的对象的浅拷贝克隆普通的对象。任何嵌套的对象或数组都将被复制引用,不重复。

因此,prevState.barthis.state.bar都是对同一个数组的引用。