猿问

react + mobx中store的值不能初始化,只能通过刷新界面来重置吗?

我写了一个通用的input组件,有获取验证码还有倒计时的功能。倒计时的时间是存在组件的store里面的。现在的情况是,当我在A页面倒计时了,hashHistory.push()跳转到B页面,其中B页面也有到计时组件,此时B页面就显示的是正在倒计时。最佳的效果是,跳转到B页面时,没有开始倒计时。但是刷新页面之后就没问题了。
想知道以什么方法来达到这个效果。目前我想到的是,在组件componentDidMount的时候重置store,就是写一个action,在action里面把所以observable的数据都手动重置一下。想问问大神们,还有其他的方法吗?
下面是我的代码:
组件代码:
classInputStore{
@observablesendSuccess=false;
@observableleftTime=60;
......
}
//倒计时
@actioncountDown=()=>{
letcount=setInterval(()=>{
if(this.leftTime===1){
clearInterval(count);
runInAction(()=>{
this.leftTime=60;
this.sendSuccess=false;
});
}
runInAction(()=>{
this.leftTime=this.leftTime-1
});
},1000);
}
A页面代码:
hashHistory.push("/Login");
A、B页面都只是引用这个公用组件
其实不只是公用组件会有这样的问题,同一个页面进入两次也会有这样的问题。比如在A页面上传一张图片,将url保存在了store里面,当第二次进入A页面的时候,上次上传的图片还存在。
我在想有没有什么一劳永逸的方法,不用在每个页面里面去重置store。
17-12-16经过几天的思考实践,总结出,如果只是少部分的数据需要重置的话,就在componentWillUnmount中调action手动重置(componentDidMount中重置会影响性能)。如果是大量数据需要重置,还是在store中分页面存储数据比较好。
牛魔王的故事
浏览 2051回答 2
2回答

饮歌长啸

export的应该是class,而不是实例化后的store,在constructor里this.store=newInputStore(),这样每次载入组件都会初始化mobx。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答