【问题标题】:Cannot dispatch in the middle of a dispatch. - Should multiple dispatchers be used?无法在调度过程中调度。 - 是否应该使用多个调度程序?
【发布时间】:2015-09-21 11:01:26
【问题描述】:

https://gist.github.com/criso/086881ec8df844eda73a

这些独立的组件应该使用不同的dispatchers 吗?

场景:
组件BAR通过操作REQ_BAR从服务器请求数据
组件FOO从先前的请求REQ_FOO_SUCCESS接收数据

--- Cannot dispatch in the middle of a dispatch. --- 错误被触发

编辑

基本上,如果您有 2 个从服务器检索数据的组件:
- 组件 FOO 可能正在调度 REQ_FOO
- 虽然组件 BAR 可能正在调度 REQ_BAR_SUCCESS

【问题讨论】:

  • 您可以通过在 componentDidUpdate 方法中触发 ActionCreators.requestFooDetails() 来克服这个问题,因为在初始渲染时不会调用 componentDidUpdate。我不确定用例是什么
  • 谁打电话给requestFooDetailsSuccess
  • fooApi - 在服务器的响应中,它会调用 actionCreator.requestFooDetailsS​​uccess

标签: reactjs reactjs-flux


【解决方案1】:

刚刚看到这个:
https://github.com/facebook/flux/issues/47#issuecomment-54716863
“如果您同时返回多个异步 API 调用,则操作队列不会是一个糟糕的解决方案。”

我不明白您在某些时候可能不会遇到这种情况。

【讨论】:

    【解决方案2】:

    您可以在 Flux 中使用waitFor。所以你解雇了一个action 并有两个stores 注册到同一个调度程序。但是一个等待另一个存储来处理有效负载。

    查看doc

    【讨论】:

    • 实际上正在研究它。我会让action 向服务器发出请求,并根据响应触发您的商店注册到的另一个actionfailActionsuccessAction
    • 这些商店不相关。我不需要在另一家商店使用来自一家商店的数据。此外,waitfor 不会阻止操作被调度。
    猜你喜欢
    • 2012-12-13
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 2016-07-23
    • 2014-05-27
    • 1970-01-01
    • 2012-05-07
    相关资源
    最近更新 更多