このコードでは、この詳細チェックは、不変です。あなたがしようとした場合:
someState = {squares: [1,2,3,4,5]}
squares = someState.squares.slice()
をあなたはslice()
方法によって作成された新しい配列を取得します。 、はい、これを実行した後、もちろん、あなたが新しい状態を持っていますが、実際には、この状態は古い状態オブジェクトを変更されません - あなたはthis.setState({squares: squares});
に疑問を持っている場合
squares = someState.squares.slice()
squares2 = someState.squares
squares[0] = 9 // doesn't change someState
squares2[1] = 9 // changes someState
someState.squares // [1,9,3,4,5] - as I said
そして:
あなたはそのようにテストすることができます古い部分から作成された新しいオブジェクトです。だから、しようとした場合:
oldState = this.state
this.setState({squares: squares})
あなたが新しい状態が保存された古いよりも異なることがわかります。this.state.squares[i] = 'X';
oldState
の場合
this.state == oldState //false
があまりにも修正されるだろうし、それは我々が無常呼んまさにです。古い状態のすべてのコピーされた部分はそれに伴って変化し、それは多くの問題を引き起こす。