JavaScript 中的对象引用比较

我最近试图深入了解 ReactJS 和 Redux 在钩子何时更新方面是如何工作的。


考虑一下我所做的游戏:


let state = { a: 1 };


//action happens, but no change

//comparison


const 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

//comparison


const prevState = state;


state = { ...state, b: 2 };


const nextState = state;


const equal = prevState === nextState ? "Yes" : "No";


console.log("Action - no change. Are they equal?", equal);

虽然现在比较如何对钩子起作用是有道理的,但不完全是为什么。


我们正在改变状态,对象本身,但无论它得到什么值,它都会是相同的引用?那么我理解错了什么?是值的对象引用,还是声明,或两者兼而有之?


浮云间
浏览 181回答 2
2回答

慕盖茨4494581

我们正在改变状态,对象本身,不,那个代码不是。具体来说state = { ...state, b: 2 };分配一个新的、引用不同的对象,该对象使用 的前一个所指对象的属性进行初始化state。那条线并没有改变对象本身;它正在为单元格分配一个不同的对象引用state。要更改状态的内容,您可以执行state.b = 2;只要引用的属性state.b不作为自己的属性存在,它是可配置的,或者原型链上有一个 setter,它就会起作用。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript