Javascript 反应流量-调度中的调度-如何避免?
我似乎遇到了一种情况,在这种情况下,我无法避免不断变化的内部调度问题 我读过一些关于这个问题的类似问题,但是除了Javascript 反应流量-调度中的调度-如何避免?,javascript,reactjs,flux,Javascript,Reactjs,Flux,我似乎遇到了一种情况,在这种情况下,我无法避免不断变化的内部调度问题 我读过一些关于这个问题的类似问题,但是除了setTimeouthacks之外,没有一个是好的解决方案,我想避免这些问题 实际上我用的是代替通量,但我认为概念是一样的 脚本 设想一个最初呈现登录表单的组件。当用户登录时,这会触发一个XHR,该XHR最终以身份验证信息(例如用户名)作出响应,然后根据身份验证信息获取一些安全数据,并呈现它而不是登录表单 我遇到的问题是,当我试图根据XHR响应启动一个获取数据的操作时,它仍在调度LOG
setTimeout
hacks之外,没有一个是好的解决方案,我想避免这些问题
实际上我用的是代替通量,但我认为概念是一样的
脚本
设想一个最初呈现登录表单的组件。当用户登录时,这会触发一个XHR,该XHR最终以身份验证信息(例如用户名)作出响应,然后根据身份验证信息获取一些安全数据,并呈现它而不是登录表单
我遇到的问题是,当我试图根据XHR响应启动一个获取数据的操作时,它仍在调度LOGIN\u响应
操作,并触发可怕的错误
Error: Invariant Violation: Dispatch.dispatch(...): Cannot dispatch in the middle of a dispatch.
例子
我创建了一个示例来演示这个问题
我有一个Wrapper
组件,它根据用户是否在MyStore
中设置,呈现一个登录按钮或一个Contents
子组件
Wrapper
组件中登录
操作LOGIN\u响应
操作被调度(通过)Wrapper
组件观察存储更改并更新其状态包装器
呈现内容
组件,而不是登录按钮Content
组件在装载时尝试分派FETCH\u DATA
操作,该操作失败,因为分派器仍在分派LOGIN\u响应
。(如果我将FETCH_DATA
dispatch包装在setTimeout
中,它可以工作,但感觉像是黑客攻击)这个数据流是否有本质上的问题?这样做的正确方法是什么?这是许多库中在
componentDidMount
中分派组件的常见问题。解决方案是在React的批量更新中封装调度;幸运的是,Alt允许您使用batchingFunction
选项执行此操作:
var alt = new Alt({
// React.addons.batchedUpdates is deprecated:
// batchingFunction: React.addons.batchedUpdates
// use this instead in newer versions of React
// see https://discuss.reactjs.org/t/any-plan-for-reactdom-unstable-batchedupdates/1978
batchingFunction: ReactDOM.unstable_batchedUpdates
});
请参阅,以获取一个工作示例以及在不同框架中对同一问题的描述。我相信我们忠实的朋友调度员有权投诉 在给出结论之前,我将尝试描述一种假设情况。假设一个应用程序有两个存储S1和S2以及两种操作A1和A2。通常通量实现的正确流程应该是: