ค้นหาเว็บไซต์

javascript - Redux mapStateToProps ไม่กระตุ้นการเรนเดอร์บนอ็อบเจ็กต์สำหรับคีย์


แอปของฉันมีหลายการสนทนา แต่ละการสนทนามีข้อความของตัวเอง

หน้าจอแชท

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 แต่การเรนเดอร์ไม่ได้กระตุ้นให้หน้าจอเรนเดอร์

วิธีที่ถูกต้องในการทำสิ่งนี้คืออะไร?

บทความที่เกี่ยวข้อง