我对如何切割每个减速器的各个状态有一些疑问。
在很多在线教程(如this one)中,手动定义了一个根全局状态,它结合了所有称为AppState
的单个状态。
当我们将包含所有Reducer的对象文字传递给StoreModule时,是否正确:
StoreModule.provideStore({r1: ReducerFunc1, r2: ReducerFunc2, ...})
使用字符串选择器时,对象键r1
和r2
可用于查询状态切片:
store.select("r1")
但是,如果我们想要类型安全,我们定义AppState接口,并确保对象键与传递给NgRx的reducer对象文字的对象键匹配,以便我们可以使用store.select(appstate => appstate.r1)
(并且这是AppState接口唯一有用的案例)?
答案 0 :(得分:4)
要使类型安全以这种方式设置:
export const reducers: ActionReducerMap<AppState> = {
auth: fromAuth.reducer;
contacts: fromContacts.reducer;
events: fromEvents.reducer;
}
每个切片都有它自己的界面。
然后设置缩减器
imports: [
StoreModule.forRoot(reducers),
],
然后在你的app模块中
export function reducer(state: AuthState = initialAuthState,
action: Action) {
例如,您的身份验证缩减器将按此定义
PATH = "C:\\Users\\JoshLaptop\\PycharmProjects\\practice\\commented.txt"
file = open(PATH, 'r')
words = ['bah', 'dah', 'gah', "fah", 'mah']
print(file.read().splitlines())
if 'bah' not in file.read().splitlines():
print("fail")
等。每个reducer都由它的键,auth reducer和auth状态调用。
答案 1 :(得分:0)
我认为您必须设置AppState界面。例如,当您依赖注入商店时,您无法执行此操作:
constructor(private store: Store)
商店必须采用如下界面:
constructor(private store: Store<AppState>)
鉴于您必须指定AppState,您可能希望始终使用胖箭头函数来获取AppState切片,因为您获得了类型安全性。
store.select(appstate => appstate.r1)