2016-11-10 91 views
0

結帳這個例子檢測變化問題:http://codepen.io/lzhelenin/pen/jVbeRgReactJS - 在狀態

有一個小陣營的應用程序,它的初始狀態看起來是這樣:

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

如果你按下按鈕,它增加了一個新的state.bar中的對象並更改state.foo值。然而,如果你按下它然後看一下控制檯,你會發現state.bar的狀態與state.bar的狀態完全一樣,儘管state.foo是不同的。爲什麼會發生?

回答

1

正如@廣播網 - 提到,_.clone創建淺拷貝克隆,所以無論是prevcurr狀態都指向同一個數組,所以你最好改變自己clickHandler()方法是這樣的:

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

http://underscorejs.org/#clone

clone_.clone(對象)創造提供 平原對象的淺複製克隆。任何嵌套的對象或數組將被複制 引用,而不是重複。

因此,您推送新值的prevState.barthis.state.bar都是對同一個數組的引用。