javascript - 如何在不变异的情况下替换状态?
问题描述
我正在使用 React 和 Redux,我需要用更新的数据更新我的状态。我的状态包含一组对象,如下所示:
[
{
"messages": [/*somedata*/],
"users": [/*somedata*/],
"avatar": "/*somedata*/",
"_id": "/*somedata*/",
"type": "/*somedata*/",
"createdAt": "/*somedata*/",
"__v": 0
},
{
"messages": [/*somedata*/],
"users": [/*somedata*/],
"avatar": "/*somedata*/",
"_id": "/*somedata*/",
"type": "/*somedata*/",
"createdAt": "/*somedata*/",
"__v": 0
}
]
所以在这个减速器中,我只想用我的有效负载替换或更新整个状态数组,但不改变我的状态。我的有效负载还包含与上面相同的对象数组,但具有更新的数据。
const chatsReducer = (state = chats, {type, payload}) => {
switch (type) {
case '@updateChats':
return state = payload //i need something like this but without mutating
default:
return state
}
}
解决方案
这应该对您有所帮助,它会创建一个新数组并用数组中的所有对象填充它payload
。
const chatsReducer = (state=chats, {type, payload}) => {
switch (type) {
case '@updateChats':
return [ ...payload ];
default:
return [ ...state ];
}
}
推荐阅读
- azure - 尝试将数据库从弹性池复制到我的另一个 Azure 服务器时出错
- vim - 有没有办法改变快速修复列表的显示模式
- prebid.js - 由 appnexus 托管的预投标服务器放大器配置
- c++ - 未调用 NodeJS 嵌套函数的 C++ 插件
- html - 我想更改标签:检查输入复选框后的颜色
- javascript - 无法在“节点”上执行“removeChild”:参数 1 不是“节点”类型。移除元素的方法
- c++ - Count a string from 1 instead of 0 in c++
- c# - 缓慢的用户控件加载 WPF:ListBox 不虚拟化
- python - Using Python how can I extract a version number from a shell output?
- unity3d - eulerAngles 是否可靠地用于局部旋转限制?