Ngrx异步初始状态

时间:2017-11-10 19:22:30

标签: angular firebase ngrx

这是我的第一个问题所以请保持温和。

我在我的角度应用程序中使用ngrx / store,我想使用来自firebase的数据设置我的reducer函数的初始状态。但是,如果我的reducer.ts文件中没有构造函数,我不确定如何执行异步操作。

我知道ngrx效果以及如何使用它们,但我没有看到使用效果设置我的Reducer初始状态的方法。

希望有一个简单的例子,有人不介意发帖帮助像我这样的初出茅庐的开发者。

3 个答案:

答案 0 :(得分:1)

初始状态的一点是,它是一开始就可用的状态,这意味着你必须立即设置它。

如果您异步获取状态,那么当您对firebase的调用返回数据时,您可以使用相同的方法来正常更新状态store.dispatch(...)

此答案中的更多信息:ngrx, How to have a starting state from an api?

答案 1 :(得分:1)

当尝试从异步源提供初始状态时,您将面临的困难是ngrx reducer和商店初始化是同步的。

但是您仍然可以通过以下步骤来实现:

  • 使用您提供给角度APP_INITIALIZER的承诺来加载您的异步初始状态(这会延迟应用初始化,直到所有承诺都得到解决为止)
  • 此状态,以便以后由ngrx进行同步访问
  • 解析角度ApplicationInitStatus.donePromise时触发您自己的初始化动作
  • 在减速器中监听此操作(这将是您自己的第一个操作,某些ngrx存储/效果初始化操作将在此之前通过),以使用先前存储的初始状态。

这是太多的代码/太宽泛的答案,但是我在帖子“ use indexedDb with ngrx for fast application bootstrap”中写了更多细节,并附带了代码示例

您还可以遵循(有些古老)issue,有人提到如果ngrx支持持久状态,异步初始化会很好。

答案 2 :(得分:0)

也许迟到我的答案,但它可以帮助别人。

这里重点是每个效果的init功能。以下dee zg

中的issue解释了这个问题

There is an init action in effects which fires when effects get ran. There you can dispatch your action, get data and fill initial state. Check Init Action section here: https://github.com/ngrx/platform/blob/master/MIGRATION.md