如何在不改变的情况下替换状态?

How to replace an state without mutating?

我正在使用 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 ];
  }
}