如何在通量存储中异步加载初始状态?

Posted

技术标签:

【中文标题】如何在通量存储中异步加载初始状态?【英文标题】:How to load initial state in a flux store asynchronously? 【发布时间】:2016-08-27 10:42:54 【问题描述】:

到目前为止,我构建的 react+flux 应用程序,根据应用程序的要求构建商店的初始状态很容易。我可以只使用简单的 JS 对象,或者如果需要持久化状态,我使用具有同步 api 的 localStorage,从而导致在调用 getInitialState 时状态可用。

getInitialState() 
   return State.getInitialState();//synchronous method which returns state

但是,根据当前的要求,我必须从 indexeddb 中保存和检索状态,它的 api 是异步的。因此,我目前得到的 intialState 是未定义的,这会导致不变的违规错误。

是否可以异步加载 store 中的 initialState?

【问题讨论】:

两个选项:为应用程序提供一个本地初始状态,直到异步调用完成,或者,为组件提供足够的逻辑来处理不完整的状态。例如,在我最近构建的一个应用程序中,我异步加载图形数据。每个 Graph 组件都会显示一条加载消息,直到它的 props 数据数组有数据为止,因为每个组件都知道它的 props 数据数组永远不会为空。 查看mern 的服务器端渲染示例。没有正确的方法,但我认为这些例子似乎特别明智。 【参考方案1】:

假设您的商店有一个 getInitialState() 方法。并返回一些包含存储中所有数据的对象。您应该在您的组件应具有的商店中指定默认值。

class ExampleStore 
    constructor()
        this.something = false
        this.somethingElse = false
        this.someData = 
    
    getInitialState()
        return 
            something: this.something,
            somethingElse: this.somethingElse,
            someData: this.someData,
        ;
    

您之所以要使用此方法是因为您不想在每个组件中复制代码只是为了等待异步调用。让 store 返回一些默认值,然后当新数据进入并将其分配给 store 时,使用 store change 函数更新组件。

【讨论】:

以上是关于如何在通量存储中异步加载初始状态?的主要内容,如果未能解决你的问题,请参考以下文章

Flutter应用打开时如何从sqlite数据库加载初始状态数据

颤动如何在初始化状态下使用未来的异步方法

Flux:如何处理多个异步请求

Redux 存储在调度后不更新(异步数据加载)

Flux Utils 存储和异步定时器

Vue.js:从 Firebase 存储中检索数据后如何异步加载模板?