In this pen,我很难理解为什么在新创建的const(第24行)上使用push函数时,无论使用扩展运算符还是简单地复制“ state”都很重要。用[...state]替换state如何导致statenewState的内容覆盖?

如果状态直接传递给newState,那是对状态的引用会被覆盖,我是否正确?即在const newState = state的情况下

最佳答案

我假设这是您正在引用的部分或笔:

const newState = [...state]; // copy contents of state, NOT the reference to it (state)
newState.push(action.payload);
return newState;


让我们看一下这段代码现在所执行的操作与使用const newState = state所执行的操作之间的区别。

const newState = [...state];


该行创建一个名为newState的新数组,其中包含state的内容。从本质上讲,它是一种衬板,可用于:

const newState = [];

for (let i = 0; i < state.length; i++) {
    newState.push(state[i]);
}


调用newState.push(action.payload)时,state数组不变,而newState则有一个额外的元素插入其中。

const newState = state;


这行代码将变量newState设置为与state相同的引用,因此仅在播放一个数组。

调用newState.push(action.payload)时,新元素被推入数组,因此newStatestate均已更改。

关于javascript - 纯函数:状态内容与状态引用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44995850/

10-11 20:04