2017-04-22 78 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

那么你会把它放在减速器中,然后呢?或者在组件中? –