代码之家  ›  专栏  ›  技术社区  ›  MCMatan

redux mapstatetops不触发键的对象呈现

  •  4
  • MCMatan  · 技术社区  · 7 年前

    我的应用程序包含多个对话,每个对话都有我自己的消息。

    聊天屏

    const mapStateToProps = (state: any) => {
      return {chatMessages: state.chatMessages.messageByConversationId[state.chatMessages.conversationId]};
    }
    

    加载消息还原器:

    export const subscribeChatMessagesSuccess: Reducer<ImmutableChatMessagesState> = (
      state: ImmutableChatMessagesState,
      { payload }: AnyAction & { payload?: SubscribeChatMessagesSuccessParams }) =>
      payload
        ? {
          ...state,
          requesting: false,
          messageByConversationId: {
            ...state.messageByConversationId,
            [payload.conversationId]: payload.chatMessages
            ,
          },
        }
        : state;
    

    这很管用!当消息被放置时,屏幕触发重新呈现。

    当我试图添加聊天信息时,问题就开始了:

    export const addChatMessage: Reducer<ImmutableChatMessagesState> = (
      state: ImmutableChatMessagesState,
      { payload }: AnyAction & { payload?: AddChatMessageParams }) => {
      return payload
        ? {
          ...state,
          messageByConversationId: {
            ...state.messageByConversationId,
            [payload.conversationId]: [...state.messageByConversationId[payload.conversationId], payload.chatMessage],
          },
        }
        : state;
    

    这次,我可以看到更新成功了,ChatMessages计数器(在redux上)增加了+1。 但是渲染不会触发屏幕的渲染。

    正确的做法是什么?

    0 回复  |  直到 6 年前