Javascript 在Flux/React中调度级联/依赖异步请求

Javascript 在Flux/React中调度级联/依赖异步请求,javascript,asynchronous,reactjs,reactjs-flux,flux,Javascript,Asynchronous,Reactjs,Reactjs Flux,Flux,我知道这个问题在不同的口味中被问了很多次,但我还没有找到“正确”的答案(也许根本就没有),所以我正在寻找“最频繁”的答案 简单的例子: 两个组件-LoginForm和信息 用户必须提供他/她的登录信息,提交表单,然后他/她才有权“询问”信息(这应在登录后自动完成) 沿着这些路线的项目结构: + actions |-- LoginAction |-- InfoAction + api |-- API + components |-- LoginForm |-- Information + sto

我知道这个问题在不同的口味中被问了很多次,但我还没有找到“正确”的答案(也许根本就没有),所以我正在寻找“最频繁”的答案

简单的例子:
  • 两个组件-
    LoginForm
    信息
  • 用户必须提供他/她的登录信息,提交表单,然后他/她才有权“询问”信息(这应在登录后自动完成)
  • 沿着这些路线的项目结构:

    + actions
    |-- LoginAction
    |-- InfoAction
    + api
    |-- API
    + components
    |-- LoginForm
    |-- Information
    + stores
    |-- LoginStore
    |-- InfoStore
    
选项: 一,

  • LoginForm.\u onSubmit()
    调用
    LoginAction.login()
  • LoginAction.login()
    使用回调/承诺调用
    API.login()
    ,然后在成功登录的情况下调用
    InfoAction.requestInfo()
二,

  • LoginForm.\u onSubmit()
    调用
    API.login()
  • 如果
    API.login()
    
  • 调用
    API.requestInfo()
  • 或者
    API.requestInfo()
    调用
    InfoAction.infoSuccess()
三,

  • LoginForm.\u onSubmit()
    调用
    LoginAction.login()
  • InfoStore
    侦听
    LOGIN\u OK
    操作并调用
    API.requestInfo()
  • API.requestInfo()
    调用
    InfoAction.infoSuccess()
    ,并将
    INFO\u OK
    事件与要存储在
    InfoStore
    中的特定信息的有效负载一起发送
(四)

componentWillMount
componentDidMount
调用API/ServiceProvider或ActionCreator似乎天生就不好。这不是一个很好的选择,但我把它放在这里是为了完整性

我的评价: 一,。 在基于回调/承诺的JS的“旧式”中很好,但似乎不是Flux方式,因为我们应该避免更改操作。只要开火就可以了

二,。 稍微打破了“流量图”——组件与API或服务提供商对话,而不是直接与ActionCreator对话。我不确定这是好是坏。它似乎是“单向的”(好),避免了循环要求(好)。我个人更喜欢这个选项(特别是2.2.1)

三,。 我个人避免使用这种方法,因为这意味着与API/ServiceProvider对话会打破“流量图”,但我也不知道这是否真的很糟糕(可能只是我不习惯使用流量做事的方式)。甚至@fisherwebdev似乎对此也没问题(例如),但这真的是最好的方法吗

四,。 糟糕,糟糕,糟糕

问题:
哪一个是“最好的”和/或是否有其他“流量最大”的选项可以做到这一点?

我最近观看了一场信息丰富的小组讨论,其中有两位Facebook开发人员正在从事使用React/Flux的大型项目。让我印象深刻的是,他们对同一个问题采取了完全不同的方法——而且两种方法看起来都非常好

也就是说,我会这样处理

  • LoginForm.onSubmit
    调用
    LoginAction.login
  • LoginAction
    调用
    API.login
    ,成功后,Dispatcher启动一个类似于
    常量的actionType。使用
    用户id的数据登录
  • 一个
    UserStore
    ,监听
    常量。登录的
    调用
    API.userInfo
    ,传递调度中的
    用户id
    。(让一家商店直接从API获取信息是一位FB员工说他们经常做的事情之一,为更新和类似性质的事情保留操作。)
  • UserStore
    将信息保存到其
    当前用户中
    并发出
    更改
  • 受影响的组件请求更新到
    UserStore
  • 现在,如果您想变得更复杂,可以让store向其
    emit
    方法添加参数,以便受影响的组件可以获取(a)更改的性质和(b)实际数据


    希望这是值得思考的

    你可能就在这里,但我个人认为这打破了“流量流程图”-是的,FB开发者似乎同意这一点(他们可能是这方面的权威),但我只希望在一个地方有异步代码。第二件事是,它可能导致“循环要求”-1。API要求ActionCreator(AC)调用
    AC.infoReceived()
    2。AC要求API在组件这么说时调用
    API.getNextInfo()
    。哦,我这里不一定指“用户信息”-只是一些“一般信息”(第二天的天气报告,一天的图片),只有在登录后才能访问(behing paywall…)。但这只是为了澄清我的思路,在这种情况下不应该有什么不同。@TooManyQuestions,你最终得到了什么?