2017-04-22 125 views
2

檢查日期是否發生了變化我有一個React + Redux應用程序,並使用Moment.js在其中顯示日期。我想要一個函數在日期改變時運行。使用React/Redux + Moment.JS

現在我有一個函數來檢查日期:

checkDate(local) { 
    if (local === null) { 
     localStorage.setItem('date', moment().format('MM-DD-YYYY')); 
    } else if (moment(local).isBefore(moment().format('MM-DD-YYYY'))) { 
     this.props.resetAll(); // This calls an action. 
    } 
    } 

如果我手動調用它,或刷新頁面時的日期改變,它工作得很好。但是,我希望能夠讓我的應用程序自行運行該this.props.resetAll()行,而無需刷新頁面。最好的辦法是什麼去做呢?它應該是在動作還是縮減器的事物的Redux方面發生的事情?我是否應該在組件生命週期的某個地方每隔X秒左右調用一次checkDate()(如果有,在哪裏)?

在此先感謝您的幫助!

+0

所以,你要派遣行動時,'矩()格式(「MM-DD-YYYY」)。 '改變是嗎?當有一天轉向另一個。 – Shota

+0

@Shota是的,沒錯! –

回答

1

我會設置一個超時,直到24:00然後調用更新功能:

moment()被定義爲當前日期/時間,以獲得差異的具體時間,你可以使用.diff()功能。因此,舉例來說,如果你想在毫秒直到第二天開始:

var msTillEndOfDay = moment().endOf('day').add(1, 'seconds').diff(moment(), 'milliseconds'); 

.endOf('day')將是23:59:59,所以你只需加1秒,具有第二天。

然後,您只需設置與具體的更新功能超時或派遣正確的行動:

setTimeout(() => { 
    this.props.dispatch({type: 'UPDATE_DATE'}) 
}, msTillEndOfDay); 
+0

那麼你會把它放在減速器中,然後呢?或者在組件中? –