提问者:小点点

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


我试图在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>

因此,正在调用该函数。handleClick()应该如下所示

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