如果我有两个或多个 NGRX 操作执行相同的操作,但在应用程序的不同部分触发,我是否可以使用一个操作执行此操作,同时区分 NGRX 日志中的操作字符串?我问是因为在编写 Action 并尝试遵循“ Action 卫生”原则时, Action 应该特定于事件并且可以在一年后可读,并告诉开发人员该 Action 在应用程序中的确切位置被触发,我想限制为尽可能多的 NGRX 样板。
例如:我有一个“AddTodo”操作。此操作可以在我的应用程序中的两个位置执行 - 一个在“待办事项列表”页面上,另一个在“待办事项详细信息”页面上。每个 Action 对于它们被触发的页面都是独一无二的,但它们做的事情完全一样;他们向我的状态对象添加了一个新的 Todo 项目。
const TODO_LIST = '[Todo List]';
const TODO_DETAILS = '[Todo Details]';
export const TODO_LIST_ADD = `${TODO_LIST} Add`;
export const TODO_DETAILS_ADD = `${TODO_DETAILS} Add`;
export class TodoListAdd implements Action {
readonly type = TODO_LIST_ADD;
constructor(public payload: Todo) { }
}
export class TodoDetailsAdd implements Action {
readonly type = TODO_DETAILS_ADD;
constructor(public payload: Todo) { }
}
export function todoReducer(state = initialState, action: Action): TodoState {
switch (action.type) {
case actions.TODO_LIST_ADD:
case actions.TODO_DETAILS_ADD:
return {
...state,
todo: (action as actions.TodoListAdd | actions.TodoDetailsAdd).payload,
}
default:
return state;
}
}
如果要保持 Action 卫生,这是唯一的方法吗?有两个操作执行完全相同的操作,唯一的区别是在 NGRX 事件日志中区分它们的字符串类型。我会很高兴有一种方法可以通过耦合 Action 创建者来减少样板的数量,而不会失去类型的特异性。
谢谢,
最佳答案
是的,如果您遵循良好的行动卫生,这是唯一的方法。
但是,您可以按照此处 https://medium.com/javascript-everyday/reusable-action-creators-with-context-2a31dca98192 的描述为您的操作提供上下文。
关于angular - 如何按照 "action hygiene"指南使用多个 NGRX 操作来执行相同的操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54424013/