我的聊天应用程序需要一个可以跟踪对象的状态
messages.roomId.messageId.payload
其中payload将包含消息对象的主体。
目前每当我的新消息进来时,我都会有以下缩减器
case 'NEW_MESSAGE':
return {
...state,
messages: {
...state.messages,
[action.roomId]: { //Missing something here.
[action.id]:
action.payload
}
}
};
所以我意识到房间里面只有一条消息,因为我没有使用......维持以前的状态..
所以我尝试了以下内容。
case 'NEW_MESSAGE':
return {
...state,
messages: {
...state.messages,
[action.roomId]: {
...state.messages.[action.roomId], [action.id]: //Giving me error here.
action.payload
}
}
};
出现的错误是
.. state.messages。[action.roomId],[action.id]:action.payload
它不接受。[action.roomId]
我应该如何将动态键放在那里以便我的减速器工作?
答案 0 :(得分:3)
当您使用括号表示法时,您不必使用点表示法来访问对象键,您只需编写
...state.messages[action.roomId]
您的完整代码将是
case 'NEW_MESSAGE':
return {
...state,
messages: {
...state.messages,
[action.roomId]: {
...state.messages[action.roomId], [action.id]:
action.payload
}
}
};