2017-04-22 13 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側で起こる何かであるべきですか? checkDate()をコンポーネントのライフサイクルのどこかにX秒ごとに呼び出す必要がありますか?

ありがとうございました!あなたが.diff()機能を使用することができ、特定の時間に差異を取得するには、

moment()は、現在の日付/時間として定義されています

+0

ですから、とき '瞬間()フォーマット(「MM-DD-YYYY」)アクションを派遣したいです。 'はい?ある日が別の日に変わったとき。 – Shota

+0

@Shotaはい、そうですよ! –

答えて

1

私はその後、更新機能を呼び出す24:00まで、タイムアウトを設定します。

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

だから、これを減速機に入れるのですか?またはコンポーネントですか? –

関連する問題