从监听器回调后调用动作,...不能在调度中调度?

时间:2016-01-14 19:17:17

标签: reactjs flux reactjs-flux

我遇到了React和Flux的问题......我们的应用程序非常类似于新的Flux聊天示例。我们有着名的错误"无法在发货中间发货"。但是,在某些情况下,我们很难以一种好的方式来解决这个问题。

我们的疑问与此相同:https://groups.google.com/forum/#!topic/reactjs/mVbO3H1rICw,但我无法理解所采用的解决方案。据我了解,这不是一个非常优雅的解决方案。

以下是事件序列:

  1. 分派行动A;

  2. 商店更新其内部状态并发出更改消息;

  3. 反应组件X接收更改消息(通过侦听器的回调)并更新它的状态(setState);

  4. 组件X呈现,并且作为其一部分,也安装了新组件Y.我们选择要使用状态信息呈现的组件(Y,Z等);

  5. 新组件Y需要显示最初未加载的数据。因此,我们在组件Y的componentDidMount()中调用API,该API调用操作B.

  6. 然后,使用Action B中的新调度程序,我们发出此调度错误。

    如果您认为我们的应用程序逻辑存在一些问题,我可以带一些实用的示例来说明为什么这种情况对我们来说很常见。任何关于如何重构这个" flux"非常欢迎。

    感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我认为您需要在启动操作b之前使用调度程序中的void push_test() { if(request().post("will_leak")){ std::this_thread::sleep_for(std::chrono::seconds(5)); // Note client timeout of 3 seconds. } response().set_plain_text_header(); response().out() << "If you see this on the client, we're all gucci"; // Hint: if will_leak was true, you never see the above message. } 令牌(您正在使用waitFor npm模块中的调度程序吗?)。另外,你可以做的是在行动A期间从你的商店进行ajax调用,如果你总是需要来自行动b的数据。

flux

您有一个数据访问层类/对象,它将您的ajax调用包装到api。使用商店中的状态作为输入,并从成功函数调用触发器更改。这是我在使用solution b would look like this in /* store.js */ Dispatcher.register(function(payload){ switch payload.type { case ACTION_A: /* do your state logic */ StoreDataAccessLayer.apiCall() } } npm模块时看到的原始解决方案,如果你没有使用flux