假设我有一个状态AnimalState,如下所示:
{
cats: Cat[];
dogs: Dog[];
}下面是如何定义reducers的:
export const catsReducer = createReducer([],
on(AnimalAction.loadCats,
(state, { cats }) => {
return {
...state,
cats
};
}),
);
export const dogsReducer = createReducer([],
on(AnimalAction.loadDogs,
(_, { dogs }) => {
return dogs;
}),
);
export const reducers: ActionReducerMap<AnimalState> = {
cats: catsReducer,
dogs: dogsReducer,
};然后,我使用InjectionToken将缩减程序注入到我的自定义模块中,如下所示:
const reducerToken = new InjectionToken<ActionReducerMap<AnimalState>>(
'ANIMAL_REDUCERS',
{ factory: () => reducers });
StoreModule.forFeature("animal", reducerToken),我的问题是如何创建和注册同时使用cats和dogs值的缩减程序。
发布于 2020-09-16 18:12:42
好的,你可能会想要拆分reducer和initial状态:
const initialCatState: Cat[] = []
export const catsReducer = createReducer(initialCatState,
on(CatAction.update,
(state, { cats }) => {
return cats;
}),
);
const initialDogState: Dog[] = []
export const dogsReducer = createReducer(initialDogState,
on(DogAction.update,
((state: Dog[]), { dogs }) => {
return dogs;
}),
on(DogAction.add,
((state: Dog[]), { dog }) => {
return [...dogs, dog];
}),
);然后注册两个功能:
StoreModule.forFeature("cats", catsReducer),
StoreModule.forFeature("dogs", dogsReducer),并选择
export const selectCats = createFeatureSelector('cats');
export const selectDogs = createFeatureSelector('dogs');https://stackoverflow.com/questions/63917575
复制相似问题