在componentDidUpdate上更新反应状态时超出最大更新深度

时间:2020-03-30 18:13:12

标签: javascript reactjs

我应该使用什么反应生命周期来更新来自axios GET方法的信息在组件上的本地状态?

到目前为止,我尝试了componentDidMount,但轴距尚未完成,因此道具为空[]。 我也尝试过componentDidUpdate。出乎意料的是,axios GET已在此处完成,但是当我尝试更新状态时,我收到了“最大更新深度超出”的警告。

我的代码示例如下:

componentDidUpdate() {
   const {item} = this.props; // this is coming from axios

   this.setState({
        ...
   });
}

2 个答案:

答案 0 :(得分:1)

在setState函数之前检查项目相等性值,如下所示:

componentDidUpdate(prevProps) {
   const {item} = this.props; // this is coming from axios

   if(prevProps.item === item) return;

   this.setState({
        ...
   });
}

答案 1 :(得分:0)

正如他们在文档中所说:https://reactjs.org/docs/react-component.html#componentdidupdate

You may call setState() immediately in componentDidUpdate() but note that 
it must be wrapped in a condition like in the example above, or you’ll 
cause an infinite loop

您一直在调用setState,这会导致无限循环。