如何解决不可变变量和纯函数更新状态
我正在学习不变性和纯函数。作为一个新手,我很挣扎,我不明白以下代码是否会改变状态或数据。
这是代码
let state = [];
const updateState = (state,data) => {
return [...state,data];
}
state = updateState(state,1);
console.log(state);
我想使用接收状态和数据并更新原始状态的纯函数。
这行 state = updateState(state,1);
对我来说感觉像是突变,但我不确定。我是否正在改变状态?
感谢您的帮助。我正在努力学习。
解决方法
是的,您的代码会在您认为的地方发生变化。 updateState
是一个纯函数,因为它没有副作用,不会改变任何东西,并且在给定相同输入的情况下始终具有相同的返回值,但重新分配 state
是一种变异。这也是像 Redux 这样的库在幕后所做的事情,例如 here。请注意,重要的是当前状态并没有就地改变,而是完全重新分配给由纯函数计算的新状态的值。 JS 不是一种很好的纯洁性和不变性语言,但如果你的整个应用程序只是由函数和不可变数据组成(边缘有一些 IO),那么可能永远不需要重新分配或改变任何东西({{3 }}).
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。