【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改变就执行,你这样写,肯定会一直相互反复触发的。
第一:不能在render
中调用ajax
方法。render
是纯函数,所以不能调用ajax
方法。
第二:componentWillReceiveProps
方法,最好做个判断,this.props
与nextProps
,或者this.state
与nextState
不同的时候再执行。
render -> 调用ajax -> 成功回调setState -> render
死循环
解决办法 在componentDidMount调用ajax
你这是死循环啊亲,render里不能用this.setState()的。
以上是 【React】react里render里面调用方法怎么会疯狂执行? 的全部内容, 来源链接: utcz.com/a/75409.html