无法在派送过程中派送
Cannot dispatch in the middle of a dispatch
所以我得到的错误是:
Uncaught (in promise) Error: Invariant Violation: Dispatch.dispatch(...): Cannot dispatch in the middle of a dispatch.(…)
我已经阅读了无数关于此错误的帖子,但我似乎无法弄清楚为什么会出现此错误。我在页面加载时收到错误,从那以后它工作正常。当我删除加载操作时:loading: StudentsActions.studentsLoading
一切正常。
您可以在 github repo
上找到所有代码
提前致谢!
您收到此错误是因为您同时执行了多个分派。当页面加载时,您的 NavBar
组件和 StudentList
组件都会被渲染,这会在两者上调用 componentDidMount
,在您的情况下,您会在两个地方启动调度。
您的 "presentation" 组件与您的 dispatcher/stores 交互使用了不良的通量模式。正如 flux 文档中所指出的,正确的方法是让一个单一的顶级组件处理调度并通过 props 将状态传递给其他组件。在您的情况下,App
组件是唯一应该知道商店或可以调度操作的组件。
这有很多优点,例如使您的整个应用程序更易于使用和重构,因为大多数组件不知道或不关心数据的来源。它还可以防止您遇到的错误。 flux 不允许同时进行多个调度的原因是因为允许它会导致不清楚您的应用程序为何处于特定状态的情况。不再需要遵循一行逻辑来确定您的应用程序在做什么。
您可以在调度程序中使用 "defer" 选项。
在你的情况下它会是这样的:
StudentAction.getStudents.defer(options);
所以我得到的错误是:
Uncaught (in promise) Error: Invariant Violation: Dispatch.dispatch(...): Cannot dispatch in the middle of a dispatch.(…)
我已经阅读了无数关于此错误的帖子,但我似乎无法弄清楚为什么会出现此错误。我在页面加载时收到错误,从那以后它工作正常。当我删除加载操作时:loading: StudentsActions.studentsLoading
一切正常。
您可以在 github repo
上找到所有代码提前致谢!
您收到此错误是因为您同时执行了多个分派。当页面加载时,您的 NavBar
组件和 StudentList
组件都会被渲染,这会在两者上调用 componentDidMount
,在您的情况下,您会在两个地方启动调度。
您的 "presentation" 组件与您的 dispatcher/stores 交互使用了不良的通量模式。正如 flux 文档中所指出的,正确的方法是让一个单一的顶级组件处理调度并通过 props 将状态传递给其他组件。在您的情况下,App
组件是唯一应该知道商店或可以调度操作的组件。
这有很多优点,例如使您的整个应用程序更易于使用和重构,因为大多数组件不知道或不关心数据的来源。它还可以防止您遇到的错误。 flux 不允许同时进行多个调度的原因是因为允许它会导致不清楚您的应用程序为何处于特定状态的情况。不再需要遵循一行逻辑来确定您的应用程序在做什么。
您可以在调度程序中使用 "defer" 选项。 在你的情况下它会是这样的:
StudentAction.getStudents.defer(options);