Ist der folgende Code falsch?React's setState(), Datenmutation für verschachtelte Strukturen, warum nicht direkt den Status ändern?
state={ foo: { bar: true } } // line 1
setState(state) // line 2
state.foo.bar = false // line 3
setState(state) // line 4
Wenn ja, warum?
This schlagen vor, dass es falsch ist, aber erklärt nicht warum?
Ich denke, es ist nicht falsch ist, aus folgendem Grund:
- bei
line 2
vdom1
erstellt - bei
line 4
vdom2
erstellt vdom1
undvdom2
verglichen werden- Unterschied ist, propagiert auf das eigentliche DOM
Wenn dies der Fall ist, sollte die Mutation state
um line3
keinen Einfluss darauf haben, was bei line4
passiert.
Mit anderen Worten:
diese entsprechende Code sein sollte:
state={ foo: { bar: true } } // line 1
setState(state) // line 2
state={ foo: { bar: false } } // line 3
setState(state) // line 4
Ist dieser Code entspricht dem oben ein?
Wenn nicht, warum nicht?
Dies scheint verwandt zu sein: http://stackoverflow.com/questions/37755997/why-cant-i-directly-modify-a-components-state-really – jhegedus
Ich legte ein Kopfgeld auf diese verwandte Frage: http: // stackoverflow.com/questions/37755997/why-cant-i-directly-modify-a-components-state-really – jhegedus
Dies ist auch verwandt http://stackoverflow.com/questions/28300547/is-it-a-good- practice-to-modify-a-components-state-and-tell-call-setstatediese? rq = 1 gibt aber keine Antwort – jhegedus