создать дочерние редукторы с помощью адаптера сущности ngrx - PullRequest
0 голосов
/ 27 мая 2019

Мне нужно создать пользовательское состояние, которое будет содержать данные, которые являются дочерними по отношению к родительскому состоянию, и для этого я создам редуктор для каждого дочернего состояния.

Я хочу создать дочерние редукторы, используя @ ngrx / entity , чтобы он корректно работал с angularfire2 stateChanges() ссылка здесь .

Я решил сделать это, потому что у меня будетмного записей и, чтобы у меня была лучшая производительность и я мог искать ключ.

Я просто не знаю, как структурировать это с помощью Ngrx , и я хотел бы структурировать данные следующим образом:

index.ts

export interface AppState {
    router: any;
    auth: Auth,
    contacts: ContactState,
    users: UsersState,
    config: ConfigState
};

export const reducers: ActionReducerMap<AppState> = {
    router: routerReducer,
    auth: authReducer,
    contacts: contactsReducer,
    users: usersReducer,
    config: configReducer,
    // Is not this allowed here? How can I structure this way?
    handbooks: {
        handbook: handbookReducer, // ids: [...] entities [...] <- can have 1k 
        anamnesis: anamnesisReducer, // ids: [...] entities [...] <- can have 1k 
        exams: examsReducer, // ids: [...] entities [...] <- can have 1k 
        ducts: ductsReducer, // ids: [...] entities [...] <- can have 1k
        // ... others
   }
};

reducer.ts

export const customAdapter = createEntityAdapter<any>();
export interface CustomState extends EntityState<any> { }
export const initialState: CustomState = customAdapter.getInitialState(null);

export function customReducer(
    state: CustomState = initialState,
    action: Action) {

    switch (action.type) {

        case actions.ADDED:
            return customAdapter.addOne(action.payload, state)

        case actions.MODIFIED:
            return customAdapter.updateOne({
                id: action.payload.id,
                changes: action.payload
            }, state)

        case actions.REMOVED:
            return customAdapter.removeOne(action.payload.id, state)

        default:
            return state;
    }

}

Мне нужно структурировать в соответствии сПо логике выше, у меня будет редуктор для каждого дочернего состояния, чтобы в будущем я мог получить лучшую производительность.

Как я могу структурировать дочерние редукторы с ActionMapReducer?Так что я могу изменить статус каждого ребенка в отдельности, не меняя всего состояния.

...