ngrx商店是否持久存在?

问题描述 投票:-5回答:2

ngrx商店是否持久存在?换句话说,我们可以关闭浏览器重新打开它,并检索添加到ngrx store的状态吗?

javascript angular ngrx
2个回答
1
投票

您可以通过使用像idb.js这样的库来保存状态以将数据保存到浏览器indexDB,然后通过使用ngrx效果,您可以使用init效果在webapp加载时重新加载状态。这是一个示例代码,假设我想重新加载所选语言。效果将是:

 @Effect()
  init$: Observable<Action> = defer(() => {
    return from(storageDb.readData('app', Lang.ActionType.LANG_KEY)).pipe(
      map((data: any) => {
        const tmpData = data ? data.state : {dir: 'rtl', selected: 'ar'};
        this.translate.setDefaultLang(tmpData.selected);
        return new Lang.LanguageInit(tmpData);
      })
    );
  });

storageDb.readData是idb按键加载数据的包装器,效果将在加载效果时启动,它将从indexdb获取数据,如果找不到任何设置默认值,则调度一个Action。 ngrx最佳实践是使用promises而不是reducers,因为加载数据是异步操作,然后在你的状态reducer中你可以像这样捕获Action:

case lang.ActionType.LANGUAGE_INIT: {
      return {...state, ...action.payload};
}

以这种方式使用它可以切割你的统计数据保存它们并加载它们即使在延迟加载时也是如此。


0
投票

nrxg/store只在记忆中。要通过浏览器管理状态,例如pouchdb,可以使用ngrx/effectsMore here

© www.soinside.com 2019 - 2024. All rights reserved.