超过最大更新深度。当组件在 componentWillUpdate 中重复调用 setState 时,可能会发生这种情况

Posted

技术标签:

【中文标题】超过最大更新深度。当组件在 componentWillUpdate 中重复调用 setState 时,可能会发生这种情况【英文标题】:Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate 【发布时间】:2020-12-11 01:22:37 【问题描述】:

我试图在 ReactJS 中切换组件的状态,但我收到一条错误消息:

已超过最大更新深度。当组件在 componentWillUpdate 或 componentDidUpdate 中重复调用 setState 时,可能会发生这种情况。 React 限制了嵌套更新的数量以防止无限循环。

我的代码中没有看到无限循环,有人可以帮忙吗?

ReactJS 组件代码:

import React from 'react' 
    
import Buttonevent from './buttonevent.js'
    
class Button extends React.Component 
  constructor (props) 
    super(props);
    this.state = counter: 0;
  
    
  clickHandler()     
    this.setState(
      counter: this.state.counter+1
    , function () 
      console.log (" Job done");
    );  
  
  
  render() 
    return(   
      <div classname="app">  
        <div classname="click-count">
          Button presses: this.state.count
        </div>
    
        <button onClick= this.clickHandler.bind(this)> Add one</button>
    
        <Buttonevent></Buttonevent>
    
      </div>
    );
  

export default Button;
import React,  Component  from 'react';
    
class Buttonevent extends React.Component 
  constructor() 
    super();
    this.state =  buttontext: "Click me Please";
    this.handleClick = this.handleClick.bind(this);
  
    
  handleClick() 
    this.setState(() => 
      return  buttontext: "Thanks, Button has been clicked !"
    );
  
        
  render() 
    const buttontext = this.state
    return <button onClick =this.handleClick() > buttontext </button>    
  

export default Buttonevent; 

【问题讨论】:

【参考方案1】:

下面这行代码是你的问题

return <button onClick =this.handleClick() > buttontext </button>

由于 this.handleClick() 函数被调用,而不是它应该如下所示

return <button onClick =this.handleClick > buttontext </button>

【讨论】:

感谢您解决问题。你能检查一下按钮类有什么问题吗?我没有得到计数器输出 @Sasikumar S 渲染中的变量名不正确。代替:按钮按下:this.state.count 使用:按钮按下:this.state.计数器

以上是关于超过最大更新深度。当组件在 componentWillUpdate 中重复调用 setState 时,可能会发生这种情况的主要内容,如果未能解决你的问题,请参考以下文章

ReactNative:超过最大更新深度错误

超过最大更新深度 - React Js

我从 React 得到一个错误:超过最大更新深度

useEffect & map 超过了最大更新深度

React-Native = Invariant Violation:超过最大更新深度

ReactJs 超过最大更新深度