在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ react里render里面調(diào)用方法怎么會瘋狂執(zhí)行?

react里render里面調(diào)用方法怎么會瘋狂執(zhí)行?

代碼運行后瘋狂執(zhí)行,不知道為什么?或者說有沒有更好的寫法?
代碼如下:

//從父組件接收
componentWillReceiveProps(nextProps) {

        this.setState({
            code: nextProps.capacityBlockIndex
        })
}

request = (str) => {
        console.log("done" + str);  //控制臺瘋狂的輸出
        ajax({
            url: '//api',
            jsonp: 'callback',
            data: {
                'capabilityCode': str
            },
            success: (res) => {

                this.setState({
                    taskArr: res.values
                });
                return;
            },
            error: () => { }
        });

    }
    
    
    render(){
        if(this.state.code === 0){
            this.request('infor_display_ability');
        }
    }
回答
編輯回答
嫑吢丕

clipboard.png

2018年3月30日 04:03
編輯回答
無標(biāo)題

不能在這個生命周期中componentWillReceiveProps做setState操作。

這個鉤子本身的觸發(fā)條件就是state,或者props改變就執(zhí)行,你這樣寫,肯定會一直相互反復(fù)觸發(fā)的。

2017年5月22日 23:49
編輯回答
怣人

render -> 調(diào)用ajax -> 成功回調(diào)setState -> render
死循環(huán)
解決辦法 在componentDidMount調(diào)用ajax

2017年8月10日 16:20
編輯回答
下墜

你在render里調(diào)用request發(fā)起ajax請求 成功后setState然后重新渲染render調(diào)用request。。。開始循環(huán)

2018年8月21日 06:38
編輯回答
情皺

你這是死循環(huán)啊親,render里不能用this.setState()的。

2017年8月22日 16:20
編輯回答
心夠野

第一:不能在render中調(diào)用ajax方法。render是純函數(shù),所以不能調(diào)用ajax方法。
第二:componentWillReceiveProps方法,最好做個判斷,this.propsnextProps,或者this.statenextState不同的時候再執(zhí)行。

2018年2月13日 01:33