不能在发货中间发货

时间:2016-02-12 01:11:03

标签: reactjs firebase alt

所以我得到的错误是:

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

我已经阅读了无数关于此错误的帖子,但我似乎无法弄明白为什么我会得到它。我在pageload处得到错误,从那以后它运行正常。当我删除加载操作时:loading: StudentsActions.studentsLoading一切正常。

您可以在github repo

上找到所有代码

提前致谢!

2 个答案:

答案 0 :(得分:5)

您收到此错误是因为您同时执行多个调度。加载页面后,您的NavBar组件和StudentList组件都会呈现,这两个组件都会调用componentDidMount,在您的情况下,您会在两个位置启动调度。

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

这有很多优点,例如使整个应用程序更容易使用和重构,因为大多数组件都不知道或关心数据的来源。它还可以防止您获得的错误。 flux不允许同时进行多次调度的原因是因为允许它会导致您的应用程序处于特定状态的原因不清楚。不再需要单行逻辑来确定应用程序正在执行的操作。

答案 1 :(得分:1)

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

StudentAction.getStudents.defer(options);