我几乎是一个redux
模式的新手,并刚刚开始使用ngrx
。这真棒,这是我想尽可能使用的东西,但我有几个关于Store
概念的问题。商店vs商店<T>
我会尝试通过几个示例来描述问题,并在本帖末尾提问我的问题。
让我们先从AppState
接口和减速器:
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
加入这样的:
//part of the AppModule
...
imports:[
...,
StoreModule.provideStore(rootReducer)
]
,并在主AppComponent
这里是如何我accesing的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');
}
}
现在,一切我很喜欢这个概念,但我注意到,如果我从AppState
界面删除其中一个属性(例如,我删除了people
属性,其他所有内容保持不变),则没有任何更改(或中断)。
所以我想知道有Store<AppState>
,而不是仅仅Store
主要的原因是什么,什么是使用Store<AppState>
(它实际上取得对抗只是用Store
差异)的主要优势是什么?另外,是否有一种方法可以在AppState更改时至少执行运行时错误,但其他所有内容都保持不变?
我使用错误的可能性也非常高,但我仍然想知道这些问题的答案。
感谢您的回答。我一直在研究'Store'实现中''T'的功能,但从来没有打算检查'select'方法。 –
eminlala