In this pen,我很难理解为什么在新创建的const(第24行)上使用push函数时,无论使用扩展运算符还是简单地复制“ state”都很重要。用[...state]
替换state
如何导致state
被newState
的内容覆盖?
如果状态直接传递给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)
时,新元素被推入数组,因此newState
和state
均已更改。关于javascript - 纯函数:状态内容与状态引用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44995850/