错误原因:
如果在组件挂载(mounted)之后进行了异步操作,比如ajax请求或者设置了定时器等,而你在callback进行了setState操作,组件已经被卸载了,
此时异步操作中的callback还在执行,因此setState没有得到值。
解决方法:卸载组件时componentWillUnmount(),对所有操作进行清除。
案列:
componentDidUpdate(prevProps, prevState) {
let _this=this;
const { eventGis } = this.state;
if (eventGis && eventGis !== prevProps.eventGis) {
this.timer = setInterval(function(){_this.getDistance(eventGis)}, 1000 * 30);
}
}
componentWillUnmount() {
Subscribe.unregister('EVENT_TASK', this.handler);
this.handler = null;
this.timer && clearInterval(this.timer);
this.timer = null;
localStorage.removeItem('recordObj');
this.setState=(state,callback)=>{
return;
}
}
基础知识掌握:
componentWillMount
只会在装载之前调用一次,在render之前调用,可以在这个方法里面调用setstate改变状态,并且不会导致额外调用一次render
componentDidMount
只会在装载之后调用一次,在render之后调用,从这里开始可以通过,reactDOM.findDOMNode(this)获取到组件的dom节点
更新组件触发
componentWillReceiveProps shouldComponentUpdate componentWilllupdate componentDidUpdate