Warning: setState(...): Can only update a mounted or mounting component. This usually means you call

Posted pyj63

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Warning: setState(...): Can only update a mounted or mounting component. This usually means you call相关的知识,希望对你有一定的参考价值。

技术分享图片

一,出现以上异常的原因分析:

  因为在组件挂载(mounted)之后进行了异步操作,比如ajax请求或者设置了定时器等,而你在callback中进行了setState操作。当你切换路由时,组件已经被卸载(unmounted)了,此时异步操作中callback还在执行,因此setState没有得到值。

二,解决方案:

(1)在卸载的时候对所有的操作进行清除:

componentDidMount = () => { //1.ajax请求 $.ajax(‘你的请求‘,{}) .then(res => { this.setState({ aa:true }) }) .catch(err => {}) //2.定时器 timer = setTimeout(() => { //dosomething },1000) } componentWillUnMount = () => { //1.ajax请求 $.ajax.abort() //2.定时器 clearTimeout(timer) }
(2)、设置一个flag,当unmount的时候重置这个flag
componentDidMount = () => {
    this._isMounted = true;
    $.ajax(‘你的请求‘,{})
        .then(res => {
            if(this._isMounted){
                this.setState({
                    aa:true
                })
            }
        })
        .catch(err => {})
}
componentWillUnMount = () => {
    this._isMounted = false;
}

(3)、组件卸载的时候直接return
componentDidMount = () => {
    $.ajax(‘你的请求‘,{})
    .then(res => {
        this.setState({
            data: datas,
        });
    })
    .catch(error => {

     });
}
componentWillUnmount = () => {
    this.setState = (state,callback)=>{
      return;
    };
}





以上是关于Warning: setState(...): Can only update a mounted or mounting component. This usually means you call的主要内容,如果未能解决你的问题,请参考以下文章

ReactJS:警告:setState(...):在现有状态转换期间无法更新

从一个warning入手----熟悉React生命周期

从一个warning入手----熟悉React生命周期

在已卸载的组件中发出有关setState的警告

ComponentwillMount 被调用两次

ReactJS 并发 SetState 竞争条件