angular - NGRX 实体:如何将 action.payload 分配给 UpsertOne 中的 state 属性
问题描述
我有一个实体状态的减速器。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}) {
}
}
推荐阅读
- r - 我们可以使用 purrr::map() 就地修改嵌套结构中的字符串吗?
- amazon-web-services - 无法将负载均衡器与目标组关联
- flutter - 如何用颤振完全忘记wifi
- c# - 在 ASP.NET CORE 的控制器中未处理来自页面的操作
- pandas - Pandas groupby - 应用循环平均值将 10 分钟数据聚合成每小时数据 - 更快?
- amazon-web-services - AWS Lambda 安装节点自定义模块
- javascript - tinyMCE:不再显示内容,工具栏替换为 3 个点
- reactjs - 我没有 android 和 ios 文件夹-react native
- php - 如果“0 个结果”,则隐藏 div?
- ruby - 如何从 Ruby 启动外部应用程序并等待用户关闭它