我的应用程序包含多个对话,每个对话都有我自己的消息。
聊天屏
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。
但是渲染不会触发屏幕的渲染。
正确的做法是什么?