美文网首页
关于Warning: setState(...): Can on

关于Warning: setState(...): Can on

作者: working_Poor | 来源:发表于2019-02-18 17:14 被阅读0次

    1、问题

    Warning: 
    setState(...): Can only update a mounted or mounting component. 
    This usually means you called setState() on an unmounted component. 
    This is a no-op.
    Please check the code for the xxx component.
    

    2、报错原因

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

    3、解决方案

    1)、在卸载的时候对所有的操作进行清除(例如:abort你的ajax请求或者清除定时器)

    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)最简单的方式(推荐万金油

    componentDidMount = () => {
        $.ajax('你的请求',{})
        .then(res => {
            this.setState({
                data: datas,
            });
        })
        .catch(error => {
    
         });
    }
    componentWillUnmount = () => {
        this.setState = (state,callback)=>{
          return;
        };
    }
    

    4、本文转载自 一江西流-博客园

    相关文章

      网友评论

          本文标题:关于Warning: setState(...): Can on

          本文链接:https://www.haomeiwen.com/subject/agczeqtx.html