gpt4 book ai didi

javascript - JavaScript 中的对象引用比较

转载 作者:行者123 更新时间:2023-12-01 00:37:24 25 4
gpt4 key购买 nike

我最近试图深入了解 ReactJS 和 Redux 在钩子(Hook)何时更新方面的工作原理。

考虑一下我所做的游戏:

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);

虽然现在比较钩子(Hook)的工作原理是有意义的,但不完全是为什么。

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

最佳答案

We're changing state, the object itself,

不,该代码不是。具体

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

分配一个新的、引用不同的对象,该对象使用 state 的先前引用的属性进行初始化。

该行不会改变对象本身;它为单元格状态分配一个不同的对象引用。

要改变状态的内容,你可以这样做

state.b = 2;

只要 state.b 引用的属性不作为自己的属性存在、可配置或者原型(prototype)链上有 setter,它就可以工作。

关于javascript - JavaScript 中的对象引用比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57999548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com