不能在调度中间调度

IT技术 reactjs firebase alt
2021-05-24 07:11:57

所以我得到的错误是:

Uncaught (in promise) Error: Invariant Violation: Dispatch.dispatch(...): Cannot dispatch in the middle of a dispatch.(…)

我已经阅读了无数关于这个错误的帖子,但我似乎无法弄清楚为什么我会得到它。我在页面加载时收到错误,从那时起它工作正常。当我删除加载操作时:loading: StudentsActions.studentsLoading一切正常。

你可以在github repo上找到所有代码

提前致谢 !

2个回答

您收到此错误是因为您同时执行多个分派。当页面加载时,你的NavBar组件和你的StudentList组件都会被渲染,这会调用componentDidMount两者,在你的情况下,你会在两个地方启动一个调度。

通过让“演示”组件与您的调度员/商店进行交互,您正在使用错误的通量模式。正如flux 文档中指出的那样,正确的方法是让单个顶级组件处理调度并将状态通过props传递给其他组件。在您的情况下,该App组件是唯一应该知道商店或可以调度操作的组件。

这有许多优点,例如使您的整个应用程序更易于使用和重构,因为大多数组件不知道或不关心数据来自何处。它还将防止您遇到的错误。通量不允许同时进行多个分派的原因是因为允许它会导致不清楚您的应用程序为什么处于特定状态的情况。不再有一行逻辑可以用来确定您的应用程序在做什么。

您可以使用调度程序中的“延迟”选项。在你的情况下,它会是这样的:

StudentAction.getStudents.defer(options);