使用React / Redux + Moment.JS检查日期是否已更改

时间:2017-04-22 07:04:23

标签: javascript reactjs redux momentjs react-redux

我有一个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()(如果是,在哪里)?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分: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);