我有一个react redux项目。我有下面的方法:
const UmvValidator = (actions) => {
const expiryTime = localStorage.getItem('expiryTime')
const currentTime = moment().valueOf()
if (expiryTime) {
if (expiryTime.valueOf() > currentTime) {
localStorage.clear('expiryTime')
}
} else {
actions.directToLogin()
}
}
操作.directToLogin()看起来像这样:
export function directToLogin() {
return function (dispatch) {
dispatch(push('/'));
}
}
我希望在组件首次呈现时运行一次此方法,如下所示:
componentWillMount() {
const { actions } = this.props
umvValidator(actions)
}
其思想是如果过期时间晚于当前时间,用户将被重定向到主页。这种工作方式-用户从一个页面被定向到主页。然而,主页继续在主页和原始页面之间闪烁,因为umvValidator不断被调用!
我没有办法解决这个问题,谢谢你的帮助!
2条答案
按热度按时间owfi6suc1#
像这样的东西?
lc8prwob2#
你的组件总是挂接和卸载是不正常的。这就是问题所在。一旦你解决了这个问题,它将只挂接一次,你的
UmvValidator
函数将只被调用一次。因为我在你的例子中看到了与路由相关的代码,我怀疑你的组件可能在
router
视图元素(我不知道你在使用什么)的 * 内部 *(子元素)。所以每次你的组件调用actions.directToLogin()时,路由都会改变,同一组件的一个新示例会被创建并再次唤醒,在一个循环中调用UmvValidator。所以改为:
执行:
这只是用来说明我所说的伪代码。
另一个原因可能是您有条件地呈现组件,而该组件的条件变化很大,并导致组件装入和卸载:
我希望这对你有帮助