我在实体状态有一个减速器。如何分配action.payload.Message
给saveMessage.msg
在执行upsertOne
上UPSERT_Message_SUCCESS
采取行动。
export interface MessageState extends EntityState<Message> {
// additional entities state properties
selectedMessageId: number | null;
loaded: boolean;
loading: boolean;
saveMessage?: {
loaded: boolean;
loading: boolean;
msg?: Message;
};
}
export const adapter: EntityAdapter<Message> = createEntityAdapter<Message>({
selectId: (msg: Message) => msg.messageId,
});
export const initialState: MessageState = adapter.getInitialState({
// additional entity state properties
selectedMessageId: null,
loaded: false,
loading: false,
saveMessage: {
loaded: false,
loading: false
},
});
export function reducer(state = initialState, action: MessageActionsUnion): MessageState {
switch (action.type) {
case MessageActionTypes.UPSERT_MessageS_SUCCESS: {
return adapter.upsertMany(action.payload.Messages, { ...state, loaded: true, loading: false });
}
case MessageActionTypes.UPSERT_Message: {
return { ...state,loading: true, loaded:false };
}
//assign action.payload.message to saveMessage.msg
case MessageActionTypes.UPSERT_Message_SUCCESS: {
return adapter.upsertOne(action.payload.saveMessageHeader, {...state,loaded:true,loading:false});
// return {
// ...state,
// saveMessage: {
// loading: false,
// loaded: true,
// msgHeader: action.payload.saveMessageHeader
// }
// };
}
case MessageActionTypes.UPSERT_Message_FAIL: {
return { ...state };
}
default: {
return state;
}
}
}
对应的动作调用签名如下:
export class SaveMessageSuccess implements Action {
readonly type = MessageActionTypes.SAVE_MESSAGE_SUCCESS;
constructor(public payload: {saveMessage:partial <Message> }) {
}
}
upsertOne
不允许 aPartial<Entity>
但需要一个 entity T
。
在您的情况下,将动作创建者更改为以下内容应该可以解决问题:
export class SaveMessageSuccess implements Action {
readonly type = MessageActionTypes.SAVE_MESSAGE_SUCCESS;
constructor(public payload: {saveMessage: Message}) {
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句