我有一个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 :(得分: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);