我写了一个通用的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中分页面存储数据比较好。
2 回答
饮歌长啸
TA贡献1951条经验 获得超3个赞
export的应该是class,而不是实例化后的store,在constructor里this.store=newInputStore(),这样每次载入组件都会初始化mobx。
添加回答
举报
0/150
提交
取消