Redux 嵌套状态...带有动态键

Som*_*ial 1 reactjs redux react-redux

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

messages.roomId.messageId.payload

其中有效负载将包含消息对象的主体。

目前每当我的新消息进来时,我都有以下减速器

    case 'NEW_MESSAGE':
        return {
            ...state,
             messages: {
                ...state.messages, 
                    [action.roomId]: { //Missing something here.
                        [action.id]:
                            action.payload
                    }
                }
             };
Run Code Online (Sandbox Code Playgroud)

所以我意识到房间 ID 内总是只有一条消息,因为我没有使用 ... 来保持以前的状态..

所以我尝试了以下方法。

    case 'NEW_MESSAGE':
        return {
            ...state,
             messages: {
                ...state.messages, 
                    [action.roomId]: {
                        ...state.messages.[action.roomId], [action.id]: //Giving me error here.
                            action.payload
                    }
                }
             };
Run Code Online (Sandbox Code Playgroud)

出来的错误是

..state.messages.[action.roomId], [action.id]: action.payload

它不接受.[action.roomId]

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

Shu*_*tri 8

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

...state.messages[action.roomId]

你的完整代码是

case 'NEW_MESSAGE':
    return {
        ...state,
         messages: {
            ...state.messages, 
                [action.roomId]: {
                    ...state.messages[action.roomId], [action.id]: 
                        action.payload
                }
            }
         };
Run Code Online (Sandbox Code Playgroud)