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

21 浏览
0 Comments

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

我正在学习不可变性和纯函数。作为一个新手,我很困惑,不知道以下代码是否会改变状态或数据。

以下是代码

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

我想使用一个纯函数,它接收状态和数据并更新原始状态。

这行代码state = updateState(state, 1);对我来说感觉像是一个改变,但我不确定。我是否改变了状态?

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

admin 更改状态以发布 2023年5月22日
0
0 Comments

是的,你的代码在你想要的地方确实改变了状态。 updateState是一个纯函数,因为它没有产生任何副作用,不会改变任何东西,并且在相同的输入给定的情况下,始终具有相同的返回值,但重新赋值state是一种变异。这也是像Redux这样的库在内部执行的操作,例如这里。请注意,重要的是当前状态没有被直接更改,而是通过纯函数计算出的新状态的值被完全重新赋值给了state。 JS不是一个很好的纯洁性和不可变性的语言,但是如果您的整个应用程序只由函数和不可变数据(在边缘一些I / O)组成,就不需要重新赋值或改变任何内容(也可以看看这个问题和最佳答案)。

0