次の反応コードが間違っていますか?反復のsetState()、ネストされた構造体のデータの突然変異、なぜ状態を直接変更しないのですか?
state={ foo: { bar: true } } // line 1
setState(state) // line 2
state.foo.bar = false // line 3
setState(state) // line 4
そうであれば、なぜですか?
Thisは、それが間違っていることを示唆しているが、理由を説明しないのですか? line 2
vdom1
で
- が
- 差があると比較されている
line 4
vdom2
で - が
vdom1
とvdom2
を作成されます作成されます。私はそれは以下の理由のために、間違っはないと思います実際のDOMに伝播します
この場合、state
をline3
に変更しても、line4
に何も起こりません。言い換えれば
:
これは同等のコードのようになります。
state={ foo: { bar: true } } // line 1
setState(state) // line 2
state={ foo: { bar: false } } // line 3
setState(state) // line 4
は、上記1に、このコードと同等ですか?
ない場合、その理由は?状態の不変のクローンを作成する
は
これは関連しているようです:http://stackoverflow.com/questions/37755997/why-cant-i-directly-modify-a-components-state-really – jhegedus
私はこの関連する質問に賞金を入れました:http:// stackoverflow.com/questions/37755997/why-cant-i-directly-modify-a-components-state-really – jhegedus
これもhttp://stackoverflow.com/questions/28300547/is-it-a-good-関連しています実践・ツー・修正・コンポーネント-状態とし、その後、コールsetstatethis?RQ = 1が、答え – jhegedus