angular - 如何按照 "action hygiene"指南使用多个 NGRX 操作来执行相同的操作?

标签 angular redux ngrx

如果我有两个或多个 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/

相关文章:

angular - 使用 Angular Router 时防止通过 href ="#"重定向

javascript - 组件无法跟上 redux 状态

javascript - 使用 Normalizr 后排序

angular - 如何通过 ngrx 存储中的单个操作更新多个 reducer 的状态?

angular - 如何循环使用部分元素以使用 ng-content 进行投影

angular - rxjs:observeOn与asapScheduler和asyncScheduler:两者同时执行

angular - Angular2.0+ 中的状态管理

angular - 如何保持 ngrx 干燥?

angular - @ngrx 在递归使用智能组件时从存储中选择特定的状态片段

javascript - SignalR 客户端连接到不同的服务器