2016-01-11 33 views
0

我是React的新手,并且正在撰写无限滚动功能。正在访问状态的行为是否违反Flux原则?

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

在每个滚动事件,我呼吁行动scrollDuties,从服务器获取数据。然后调用名为loadDuties的服务器操作将响应传递给存储,并将其传递给视图。

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

这会违反Flux原则吗?

+1

我编辑此为清楚起见,但你要添加具有竞争条件的代码,以便我们可以帮你更好一点。理想情况下,您应该提供一个可重复的最低限度情况。 –

+0

我不会从Action内部读取状态,而是从组件内部读取状态。 –

+0

您是否尝试使用去抖功能? https://davidwalsh.name/javascript-debounce-function 对我来说,它似乎应该解决您的问题与多个事件命中。 – Vladiks

回答

1

The Redux flavor of Flux handles this situation in the action elegantly by way of the redux-thunk middleware.在该范例中,动作创建者可以返回一个具有参数的函数来获取商店。它的调度员知道如何评估这个函数,以便商店可以接触到这个动作,而不需要在动作中创建一个显式的存储依赖。

使用更多标准的Flux实现,为了实现相同的解耦,我相信您必须将存储参数传递给组件中的操作。也许沿着线的东西:

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

window.addEventListener('scroll', doScrollAction); 
相关问题