אנגולר - פיצול רידוסר גדול לרידוסרים קטנים יותר
יש לי ממטב תכונות (slice reducer) שנקרא animals. אני רוצה לפצל את הממטבים האלה לממלים, עופות, דגים וכו'. החלק הזה קל כי אני פשוט יכול להשתמש ב-ActionReducerMap.
עכשיו נניח שמצב המפחית של היונקים הוא עצום ואני רוצה לחלק אותו למספר מפחיתים קטנים יותר למשל משפחת החתולים, משפחת הכלבים וכו'. ה-ActionReducerMap לא מחזיר מפחית ולא ניתן לקבץ אותו. ניסיתי לחפש ברשת פתרון או דוגמה אך לא מצאתי. השאלה שלי, בקצרה, היא איך ליצור מפחיתים מקוננים ברמות מרובות.
export interface AnimalsState{
mammals: fromMammals.mammalsState;
birds: fromBirds.birdsState;
}
export const reducers: ActionReducerMap<AnimalsState> = {
mammals: fromMammals.reducer,
birds: fromBirds.reducer
};
אני רוצה לפצל את המפחית של יונקים למפחיתים קטנים יותר.
תשובה #1
אתה יכול ליצור רדוסר חדש באמצעות הפונקציה combineReducers מ-@ngrx/store, זה יאפשר לך לשלב את הרדוסר שלך עבור dogs ו-cats למצב mammals.
עשיתי דוגמה מהירה כיצד להשתמש בזה ב-stackblitz.
דוגמת הפונקציה combineReducers ניתן למצוא ב-app/store/mammals/mammals.reducer.ts:
import { combineReducers } from '@ngrx/store';
import { catsStoreName, catsReducer, CatsState } from '../cats';
import { dogsStoreName, dogsReducer, DogsState } from '../dogs';
export type MammalsState = {
[catsStoreName]: CatsState,
[dogsStoreName]: DogsState,
}
export const mammalsReducer = combineReducers<MammalsState>({
[catsStoreName]: catsReducer,
[dogsStoreName]: dogsReducer,
});
