我有一个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
答案 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;