多个减速器为同一状态

时间:2017-11-03 11:12:53

标签: javascript redux

我有一个redux应用程序,我最初异步从服务器获取一些消息。

我已经将应用程序连接到signalR连接,当用户提交消息时,我需要添加到Redux状态。 然而,似乎我无法更新状态,或者至少我做错了。

当服务器向客户端发送新消息时,我会调用我的操作addMessagesSignalR

store.dispatch(addMessagesSignalR(messageFromServer));

行动是

export function addMessagesSignalR(Obj) {
let messageFromServer = Obj;
   return {
     type: 'FETCH_MESSAGES_SIGNALR',
     payload: messageFromServer
   };
}

我的减速机是:

export default function(state = [], action) {
switch(action.type) {
    case 'FETCH_MESSAGES':
        return Object.assign({}, state, action.payload);
    case 'FETCH_MESSAGES_SIGNALR':
        return Object.assign({}, state, action.payload)
}
return state;

}

我试图将获取的消息的状态与从rootReducer中的signalR收到的消息合并:

messages: fetchMessages

1 个答案:

答案 0 :(得分:2)

Object.assign用于合并对象,但您的状态似乎是一个数组。您需要使用不同的语法来合并数组。

ES6(使用spread syntax):

export default function(state = [], action) {
switch(action.type) {
    case 'FETCH_MESSAGES':
        return [...state, action.payload];
    case 'FETCH_MESSAGES_SIGNALR':
        return [...state, action.payload]
}
return state;

ES5(使用Array.concat):

export default function(state = [], action) {
switch(action.type) {
    case 'FETCH_MESSAGES':
        return state.concat(action.payload);
    case 'FETCH_MESSAGES_SIGNALR':
        return state.concat(action.payload)
}
return state;