Redux嵌套状态...使用动态密钥

时间:2018-04-16 19:50:12

标签: reactjs redux react-redux

我的聊天应用程序需要一个可以跟踪对象的状态

  

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]

我应该如何将动态键放在那里以便我的减速器工作?

1 个答案:

答案 0 :(得分:3)

当您使用括号表示法时,您不必使用点表示法来访问对象键,您只需编写

...state.messages[action.roomId]

您的完整代码将是

case 'NEW_MESSAGE':
    return {
        ...state,
         messages: {
            ...state.messages, 
                [action.roomId]: {
                    ...state.messages[action.roomId], [action.id]: 
                        action.payload
                }
            }
         };