Ich bin ziemlich ein Anfänger mit der redux
Muster und habe gerade begonnen, ngrx
zu verwenden. Es ist großartig und es ist etwas, was ich so oft wie möglich nutzen möchte, aber ich habe ein paar Fragen bezüglich des Store
Konzepts.Store vs Store <T>
Ich werde versuchen, das Problem durch ein paar Beispiele zu beschreiben und meine Frage am Ende dieses Beitrags stellen.
Beginnen wir mit den AppState
Schnittstelle und Reduzierungen beginnen:
export interface AppState{
people: Person[],
events: Event[]
}
//events reducer
export function eventsReducer(state: any = {}, {type, payload}): Event[]{
switch(type){
case "ADD_EVENT":
return [...state, payload];
default:
return state;
}
}
//people reducer
export function peopleReducer(state: any = {}, {type, payload}): Person[]{
switch(type){
case "ADD_PERSON":
return [...state, payload];
default:
return state;
}
}
//root reducer
const root: ActionReducer<AppState> = combineReducers({people: peopleReducer, events: eventsReducer});
const INITIAL_STATE = {
people:[],
events: []
}
export function rootReducer(state: any = INITIAL_STATE, action: any){
return root(state, action);
}
rootReducer
wird wie folgt hinzugefügt:
//part of the AppModule
...
imports:[
...,
StoreModule.provideStore(rootReducer)
]
Und im Haupt AppComponent
hier ist, wie ich accesing die store
:
//part of the AppComponent
export class AppComponent{
people: Observable<Person[]>;
events: Observable<Event[]>;
constructor(private store: Store<AppState>){
this.people = store.select('people');
this.events = store.select('events');
}
}
Jetzt alles funktioniert richtig und ich mag dieses Konzept wirklich, aber ich habe bemerkt, dass sich nichts ändert (oder bricht), wenn ich eine der Eigenschaften von der AppState
Schnittstelle entferne (zum Beispiel entferne ich die people
Eigenschaft, alles andere bleibt gleich).
Also ich würde gerne wissen, was ist der Hauptgrund dafür, dass Store<AppState>
statt nur Store
und was sind die wichtigsten Vorteile der Verwendung von Store<AppState>
(wo es tatsächlich einen Unterschied gegen nur mit Store
gemacht)? Gibt es außerdem eine Möglichkeit, mindestens Laufzeitfehler zu erzwingen, wenn sich AppState ändert, aber alles andere gleich bleibt?
Die Möglichkeit, mich falsch verwendet, ist sehr hoch, wie gut, aber ich würde immer noch Antworten gerne auf diese Fragen kennen.
Vielen Dank für diese Antwort. Ich habe untersucht, was es mit "T" in der "Store" Implementierung macht, aber habe nie die 'select' Methode überprüft. –
eminlala