2016-01-11 36 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); 
相關問題