【React】react里render里面调用方法怎么会疯狂执行?

代码运行后疯狂执行,不知道为什么?或者说有没有更好的写法?
代码如下:

//从父组件接收

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');

}

}

回答

你在render里调用request发起ajax请求 成功后setState然后重新渲染render调用request。。。开始循环

不能在这个生命周期中componentWillReceiveProps做setState操作。

这个钩子本身的触发条件就是state,或者props改变就执行,你这样写,肯定会一直相互反复触发的。

【React】react里render里面调用方法怎么会疯狂执行?

第一:不能在render中调用ajax方法。render是纯函数,所以不能调用ajax方法。
第二:componentWillReceiveProps方法,最好做个判断,this.propsnextProps,或者this.statenextState不同的时候再执行。

render -> 调用ajax -> 成功回调setState -> render
死循环
解决办法 在componentDidMount调用ajax

你这是死循环啊亲,render里不能用this.setState()的。

以上是 【React】react里render里面调用方法怎么会疯狂执行? 的全部内容, 来源链接: utcz.com/a/75409.html

回到顶部