2015-07-21 36 views
13

如何/在哪裏可以定期調度操作?使用遞歸setTimeout進行倒計時。如何使用setTimeout和調度程序以redux觸發週期性操作

從例如採取類似的措施:

// Can also be async if you return a function 
export function incrementAsync() { 
    return dispatch => { 
    (function _r() { 
     setTimeout(() => { 
     // Yay! Can invoke sync or async actions with `dispatch` 
     dispatch(increment()); 
     _r(); 
     }, 1000); 
    })(); 
    }; 
} 

所以這是一個好主意,或者有更好的辦法解決這個問題,喜歡用中間件或從其他地方創造的行動?

我更喜歡這種通用版本,我可以通過商店控制計時器的啓動/停止。

我設置一個樣本實現,請看看https://gist.github.com/eguneys/7023a114558b92fdd25e

+0

因爲這確實有效,所以我可能不會重新創建一個總是看​​起來一樣的函數,而是定義一次。 –

+0

你試過setInterval嗎?真的不明白你的增量是什麼異步。請記住,js事件處理不是很精確 – softwarenewbie7331

回答

14

你的建議是罰款的辦法,雖然有點令人費解。通常,我會在組件生命週期方法中設置時間間隔(例如,componentDidMount/componentWillUnmount),並避免在其他操作中設置時間間隔。

如果您絕對需要這種靈活性,更好的選擇是使用Rx作爲異步管理,並使用dispatch可觀察鏈最後的動作。通過這種方式,您可以使用Redux照亮(同步更新)並將異步組合保留爲Rx。

相關問題