我正在使用Angular 2和ngrx / store。我想在用户派遣时重置整个商店状态USER_LOGOUT
。
我阅读了Dan Abramov关于如何重置Redux存储状态的答案。,但rootReducer
在使用ngrx / store时我不知道如何正确编写以及将其放置在何处。
还是有其他方法可以在ngrx / store中处理此问题?
bootstrap(App, [
provideStore(
compose(
storeFreeze,
storeLogger(),
combineReducers
)({
router: routerReducer,
foo: fooReducer,
bar: barReducer
})
)
]);
该答案特定于ngrx版本2。该问题还有另一个更新的答案,该答案说明了如何使用ngrx版本4可以完成相同的操作。
compose
构建ngrx根减少器。
传递给参数compose
的函数是返回reducer的函数-由reducer组成,它们本身作为参数传递。您可以像下面这样组成商店的重置:
import { compose } from "@ngrx/core/compose";
...
bootstrap(App, [
provideStore(
compose(
storeFreeze,
storeLogger(),
(reducer: Function) => {
return function(state, action) {
if (action.type === 'USER_LOGOUT') {
state = undefined;
}
return reducer(state, action);
};
},
combineReducers
)({
router: routerReducer,
foo: fooReducer,
bar: barReducer
})
)
]);
请注意,这将重置商店的所有状态-包括router
。如果这不是您想要的,则可以调整示例。
随着NgModule
引导程序的引入已经发生了变化,但是您仍然可以将组成的reducer传递给provideStore
:
import { compose } from "@ngrx/core/compose";
import { StoreModule } from "@ngrx/store";
@NgModule({
...
imports: [
...
StoreModule.provideStore(compose(...))
],
...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句