我遇到了React和Flux的问题......我们的应用程序非常类似于新的Flux聊天示例。我们有着名的错误"无法在发货中间发货"。但是,在某些情况下,我们很难以一种好的方式来解决这个问题。
我们的疑问与此相同:https://groups.google.com/forum/#!topic/reactjs/mVbO3H1rICw,但我无法理解所采用的解决方案。据我了解,这不是一个非常优雅的解决方案。
以下是事件序列:
分派行动A;
商店更新其内部状态并发出更改消息;
反应组件X接收更改消息(通过侦听器的回调)并更新它的状态(setState);
组件X呈现,并且作为其一部分,也安装了新组件Y.我们选择要使用状态信息呈现的组件(Y,Z等);
新组件Y需要显示最初未加载的数据。因此,我们在组件Y的componentDidMount()中调用API,该API调用操作B.
然后,使用Action B中的新调度程序,我们发出此调度错误。
如果您认为我们的应用程序逻辑存在一些问题,我可以带一些实用的示例来说明为什么这种情况对我们来说很常见。任何关于如何重构这个" flux"非常欢迎。
感谢您的帮助!
答案 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