javascript - 不可变变量和纯函数更新状态
问题描述
我正在学习不变性和纯函数。作为一个新手,我很挣扎,我不明白下面的代码是否改变了状态或数据。
这是代码
let state = [];
const updateState = (state, data) => {
return [...state, data];
}
state = updateState(state, 1);
console.log(state);
我想使用一个纯函数来接收状态和数据并更新原始状态。
这条线state = updateState(state, 1);
对我来说就像一个突变,但我不确定。我在改变状态吗?
谢谢你的帮助。我正在尝试学习。
解决方案
是的,您的代码会在您认为的位置发生突变。updateState
是一个纯函数,因为它没有副作用,不会改变任何东西,并且在给定相同输入的情况下始终具有相同的返回值,但重新分配state
是一种突变。这也是像 Redux 这样的库在后台所做的,例如这里。请注意,重要的是当前状态并没有被改变,它被完全重新分配给由纯函数计算的新状态的值。JS 对于纯度和不变性来说并不是一种很好的语言,但是如果你的整个应用程序只是由函数和不可变数据组成(在边缘有一些 IO),那么就可能永远不需要重新分配或改变任何东西(另见这个问题和最佳答案)。
推荐阅读
- powershell - POWERSHELL:将字符串变量保存到 csv 文件的最简单方法
- python-3.x - CNN 在视频帧中进行预测的问题
- multidimensional-array - Julia:将一维 Julia 函数应用于多维数组
- kubernetes - 我有 2 个调用相同配置的自定义覆盖。我需要在同一个文件夹中有两个 kustomization.yaml 文件
- java - 如何使用域名访问 azkaban 网页界面?
- c# - 是否有 .NET 标准等效的 ValidationProblemDetails 供客户使用?
- javascript - 如果有重复,则在下拉列表中仅显示一个值
- swift - Vapor 4/Swift:中间件开发
- c# - 如何在没有默认 DLL 文件的情况下编译 C# Visual Studio 项目?
- java - OpenJDK 的局部变量类型推断样式指南的检查样式规则