在动作中访问状态是否违反了 Flux 原则?

Is accessing state in an action a violation of Flux principles?

我是 React 新手,正在编写无限滚动功能。

window.addEventListener( 'scroll', DutyActions.scrollDuties );

在每个滚动事件中,我调用操作 scrollDuties,它从服务器获取数据。然后调用名为 loadDuties 的服务器操作将响应传递给商店,然后将其广播给视图。

问题在于,在快速滚动时它会多次点击 API,因为第二个滚动事件在 setState({loading: true}) 语句呈现在页面上之前触发。我认为唯一的解决方案是读取操作中的状态并仅在 loading 标志为 false 时才使 ajax 命中。

这会违反 Flux 原则吗?

The Redux flavor of Flux handles this situation in the action elegantly by way of the redux-thunk middleware. 在该范例中,动作创建者可以 return 具有获取商店参数的函数。它的调度程序知道如何评估此函数,以便商店可以暴露给操作,而无需在操作中创建明确的商店依赖项。

使用更多标准的 Flux 实现,要实现相同的解耦,我相信您必须将存储参数传递给组件的操作。也许是这样的:

doScrollAction: function (scrollParam) {
  var isLoadingStore = IsLoadingStore.getAll()
  DutyActions.scrollDuties(scrollParam, IsLoadingStore)
}

window.addEventListener( 'scroll', doScrollAction );