我的代码 https://gist.github.com/ButuzGOL/707d1605f63eef55e4af
因此,当我收到登录成功回调时,我想进行重定向,
重定向也通过调度程序工作。
我得到 Dispatch.dispatch(...): Cannot dispatch 在调度中间。
中间是否有任何黑客可以采取行动?
我的代码 https://gist.github.com/ButuzGOL/707d1605f63eef55e4af
因此,当我收到登录成功回调时,我想进行重定向,
重定向也通过调度程序工作。
我得到 Dispatch.dispatch(...): Cannot dispatch 在调度中间。
中间是否有任何黑客可以采取行动?
我看不到您发布的要点中的何处进行了重定向。我只看到 AUTH_SIGNIN 和 AUTH_SIGNIN_SUCCESS 操作,它们看起来很简单。
但是不,在调度过程中创建一个动作是没有技巧的,这是设计使然。行动不应该是导致改变的事情。它们应该像报纸一样,通知应用程序外部世界的变化,然后应用程序响应该消息。商店本身会引起变化。行动只是通知他们。
如果您遇到此错误,那么您需要备份并查看您是如何处理原始操作的。大多数情况下,您可以将应用程序设置为响应原始操作,完成您需要做的所有事情,并避免尝试创建第二个操作。
您可以通过“调度”下一个操作而不是直接调用它来使其工作,这是一个示例代码:
// instead of doing this
Dispatcher.dispatch(...);
// go like this
setTimeout(function() {
Dispatcher.dispatch(...);
}, 1);
这将导致您的下一个调度稍后在当前调度过程中被调用,并且不会发生错误。
如果您的调度代码在回调中,则任何其他类型的异步操作都可以正常工作(例如在 Ajax 请求的响应中)。
我正在使用这种样式来使某些表单响应这里的通用数据,并且我没有遇到任何问题,至少我使用它的方式是这样。
您可以使用调度程序中的“延迟”选项。在你的情况下,它会像:
Dispatcher.dispatch.defer(...);
您可以检查调度程序是否正在调度,例如:
if(!MyDispatcher.isDispatching()) {
MyDispatcher.dispatch({...});
}