不可变变量和纯函数更新状态

时间:2021-01-22 02:22:41

标签: javascript immutability

我正在学习不变性和纯函数。作为一个新手,我很挣扎,我不明白以下代码是否会改变状态或数据。

这是代码

let state = [];

const updateState = (state, data) => {
  return [...state, data];
}

state = updateState(state, 1);


console.log(state);

我想使用接收状态和数据并更新原始状态的纯函数。

这行 state = updateState(state, 1); 对我来说感觉像是突变,但我不确定。我是否正在改变状态?

感谢您的帮助。我正在努力学习。

1 个答案:

答案 0 :(得分:1)

是的,您的代码会在您认为的地方发生变化。 updateState 是一个纯函数,因为它没有副作用,不会改变任何东西,并且在给定相同输入的情况下始终具有相同的返回值,但重新分配 state 是一种变异。这也是像 Redux 这样的库在幕后所做的事情,例如 here。请注意,重要的是当前状态并没有就地改变,而是完全重新分配给由纯函数计算的新状态的值。 JS 不是一种很好的纯洁性和不变性语言,但如果你的整个应用程序只是由函数和不可变数据组成(边缘有一些 IO),那么可能永远不需要重新分配或改变任何东西({{3 }}).