如何按照“操作卫生”指南使用多个 NGRX 操作来执行相同的操作?

J-m*_*man 8 redux ngrx angular

如果我有两个或多个 NGRX 操作执行相同的操作,但在应用程序的不同部分触发,我是否可以使用一个操作来执行此操作,同时区分 NGRX 日志中的操作字符串?我之所以这样问,是因为在编写操作并尝试遵循“操作卫生”原则时,操作应该特定于某个事件,并且可以在一年后可读,并告诉开发人员到底在应用程序中触发操作的位置,我想限制为尽可能多的 NGRX 样板。

例如:我有一个“AddTodo”操作。此操作可以在我的应用程序中的两个位置执行 - 一个在“待办事项列表”页面上,另一个在“待办事项详细信息”页面上。每个操作对于触发它们的页面来说都是唯一的,但它们执行完全相同的操作;他们向我的状态对象添加了一个新的待办事项。

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果想保持行动卫生,这是唯一的方法吗?有两个操作执行完全相同的操作,唯一的区别是 NGRX 事件日志中区分它们的字符串类型。我希望有一种方法可以通过耦合动作创建者来减少样板文件的数量,而不会失去类型的特殊性。

谢谢,

tim*_*ver 4

是的,如果您遵循良好的行动卫生习惯,这是唯一的方法。

但是,您可以为您的操作提供上下文,如下所述https://medium.com/javascript-everyday/reusable-action-creators-with-context-2a31dca98192