代码之家  ›  专栏  ›  技术社区  ›  gnzg

纯函数:状态内容与状态引用

  •  0
  • gnzg  · 技术社区  · 7 年前

    In this pen ,我很难理解为什么在新创建的const(第24行)上使用push函数时,使用扩展运算符还是简单地复制“state”很重要。这是怎么回事 [...state] 具有 state 原因 被以下内容覆盖: newState ?

    我假设这是正确的吗 参考 如果状态直接传递给newState,则覆盖哪个状态?一、 e.在以下情况下: const newState = state

    2 回复  |  直到 7 年前
        1
  •  1
  •   Michael Peyper    7 年前

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

    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) 被称为 数组不变,而 有一个额外的元素。

    const newState = state;
    

    此行设置变量 新闻状态 状态

    什么时候 新闻状态推送(动作有效载荷) 新闻状态 状态 已经改变。

        2
  •  1
  •   Kapol    7 年前

    这样使用spread运算符将从 state 状态 newState 将引用不同的数组(这些数组具有相同的元素,因此如果其中一个元素是对象,并且您更改了它的一个属性,则该更改将在另一个数组中可见)。写 const newState = state