Как использовать более одного действия NGRX, которое делает то же самое, следуя указаниям «гигиена действий»? - PullRequest
0 голосов
/ 29 января 2019

Если у меня есть два или более действия NGRX, которые выполняют одно и то же, но запускаются в разных частях моего приложения, могу ли я использовать одно действие для выполнения этого, одновременно дифференцируя строку действия в моем журнале NGRX?Я спрашиваю, потому что, когда пишу действия и пытаюсь следовать принципам «гигиены действий», где действия должны быть специфичными для события и могут быть читаемы год спустя, и сообщить разработчику, где именно в приложении было запущено действие, я хочу ограничить каккак можно больше NGRX.

Например: у меня есть действие "AddTodo".Это действие может быть выполнено в двух местах в моем приложении - одно на странице «Список Todo», а другое на странице «Детали Todo».Каждое действие уникально для страницы, с которой они инициированы, но они делают то же самое;они добавляют новый элемент 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;
    }
}

Если вы хотите соблюдать гигиену действий, это единственный способ сделать это?Есть два действия, которые делают одно и то же, единственное отличие - это тип строки, который различает их в журнале событий NGRX.Мне бы очень хотелось, чтобы был способ уменьшить количество шаблонов, соединяя создателей действий, не теряя при этом специфику типа.

Спасибо,

1 Ответ

0 голосов
/ 29 января 2019

Да, если вы соблюдаете правила гигиены действий, это единственный способ.

Тем не менее, вы можете предоставить контекст для ваших действий, как описано здесь https://medium.com/javascript-everyday/reusable-action-creators-with-context-2a31dca98192.

...