Redux mapStateToProps не вызывает рендеринг объекта для ключа

Мое приложение содержит несколько разговоров, в каждом разговоре есть собственные сообщения.

ChatScreen

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;

Это прекрасно работает! Когда сообщения являются местами, триггеры экрана повторно отображаются.

Проблема начинается, когда я пытаюсь добавить ChatMessage:

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 (по сокращению) - на +1. Но рендер не запускает Screen из рендеринга.

Каков правильный способ сделать это?

javascript,reactjs,react-native,redux,react-redux,

4

Ответов: 0

Redux mapStateToProps не вызывает рендеринг объекта для ключа

Мое приложение содержит несколько разговоров, в каждом разговоре есть собственные сообщения.

ChatScreen

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;

Это прекрасно работает! Когда сообщения являются местами, триггеры экрана повторно отображаются.

Проблема начинается, когда я пытаюсь добавить ChatMessage:

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 (по сокращению) - на +1. Но рендер не запускает Screen из рендеринга.

Каков правильный способ сделать это?

04JavaScript, reactjs, реагируют родной, перевождь, реагируют-перевождь,
Похожие вопросы