Reactjs 反应+;Flux:在一个动作之后调用另一个动作的最佳实践?

Reactjs 反应+;Flux:在一个动作之后调用另一个动作的最佳实践?,reactjs,action,flux,Reactjs,Action,Flux,我有一个组件,我们称之为List,它调用一个action creatorAction1.getItems()。 在Action1.getItems()从服务器检索到信息后,我需要调用另一个操作创建者:Action2.getMoreItems(),这在不同的文件中是一个完全不同的操作 事实: 两个操作创建者都会发送一个操作并更改存储 不能调用 Actudio2. GoMeReItMeScript()/ 列表> > ,因为它引发了一个错误“不能在调度的中间发送… > 可能性 在服务器返回后,在

我有一个组件,我们称之为
List
,它调用一个action creator
Action1.getItems()
。 在
Action1.getItems()
从服务器检索到信息后,我需要调用另一个操作创建者:
Action2.getMoreItems()
,这在不同的文件中是一个完全不同的操作

事实:

  • 两个操作创建者都会发送一个操作并更改存储
  • 不能调用<代码> Actudio2. GoMeReItMeScript()/<代码> <代码>列表> <代码> > <列表> <代码>,因为它引发了一个错误“<代码>不能在调度的中间发送…<代码> >
  • 可能性

  • 在服务器返回后,在
    Action1.getItems()内调用
    Action2.getMoreItems()
  • 添加一个回调,这样我将有
    Action1.getItems(回调)
    并从
    List
    组件调用
    Action2.getMoreItems()
  • 我相信这可能是Flux的一个非常基本的用途,但我仍然无法思考如何正确使用它,这两种解决方案在我看来都很难看

    建议


    谢谢大家!

    是否取决于
    getItems
    的返回值?如果是这样,您可以在
    中调用操作,然后调用
    getItems
    回调

    如果不是,那么您可以同时调用这两个调用,然后查看承诺的结果


    所以在你的问题中,我的票数是第二。我不认为这是一个丑陋的解决方案。您正在将获取项目和更多项目的责任委托给您的操作。组件本身并不知道这一点,只是简单地为这些项目发送了一个请求。它们的构建方式对组件应该是透明的。

    大多数flux实现都有一个类似“waitFor”的方法,它让一个存储等待另一个存储完成

    假设您的存储中需要两个执行2方法:
    GetUser
    GetPermissions
    。第一个获取用户,后一个获取用户拥有的权限。显然,
    GetPermissions
    需要等待从第一个方法获取用户对象

    在本例中,您将分派一个名为
    GetUser
    的操作,并使两个存储函数都侦听该操作。因此,如果分派
    GetUser
    ,两个存储方法都会执行

    在alt.js(flux实现)和许多其他方法中,有类似于
    waitFor(store)
    的方法,因此
    GetPermissions
    可以等待UserStore获取用户。在alt.js伪代码中,如下所示:

    // UserStore
    function getUser() {
        fetch('api/user').then(this.setState);
    }
    
    // PermissionsStore
    function getPermissions() {
        this.waitFor(UserStore);
        let user = UserStore.getState().user;
        fetch('api/permission', user).then(this.setState);
    }
    

    正如我所说,这不是工作伪代码,但它展示了这个概念。如果您感兴趣,flux实现alt.js非常棒。请访问

    谢谢您的回复,您所说的确实有道理。那么,要求另一个动作创建者提供()动作创建者可以吗?在我看来,这完全可以。