我最近试图深入了解 ReactJS 和 Redux 在钩子何时更新方面是如何工作的。考虑一下我所做的游戏:let state = { a: 1 };//action happens, but no change//comparisonconst prevState = state;state = state;const nextState = state;const equal = prevState === nextState ? "Yes" : "No";console.log("Action - no change. Are they equal?", equal);上面的例子很简单,都指向同一个对象。看下一个例子:let state = { a: 1 };//action happens, change in state//comparisonconst prevState = state;state = { ...state, b: 2 };const nextState = state;const equal = prevState === nextState ? "Yes" : "No";console.log("Action - no change. Are they equal?", equal);虽然现在比较如何对钩子起作用是有道理的,但不完全是为什么。我们正在改变状态,对象本身,但无论它得到什么值,它都会是相同的引用?那么我理解错了什么?是值的对象引用,还是声明,或两者兼而有之?
2 回答
慕盖茨4494581
TA贡献1850条经验 获得超11个赞
我们正在改变状态,对象本身,
不,那个代码不是。具体来说
state = { ...state, b: 2 };
分配一个新的、引用不同的对象,该对象使用 的前一个所指对象的属性进行初始化state
。
那条线并没有改变对象本身;它正在为单元格分配一个不同的对象引用state
。
要更改状态的内容,您可以执行
state.b = 2;
只要引用的属性state.b
不作为自己的属性存在,它是可配置的,或者原型链上有一个 setter,它就会起作用。
添加回答
举报
0/150
提交
取消