我从 React 收到错误:超出最大更新深度

I get an Error from React: Maximum update depth exceeded

我写了我的代码,我认为一切都是正确的,但我从 react.js 得到了一个错误 错误:超出最大更新深度。当组件在 componentWillUpdate 或 componentDidUpdate 中重复调用 setState 时,就会发生这种情况。 React 限制嵌套更新的数量以防止无限循环。

App.js:

    import React, { Component } from 'react';
import Navbar from "./component/Navbar";
import './App.css';
import Users from './component/Users';
class App extends Component {
  state = {
    users: [
      {
        id: 1,
        name: "Jessie Alby",
        salary: "5000",
        department: "Software"
      },
      {
        id: 2,
        name: "John Tyson",
        salary: "10000",
        department: "Engineer"
      },
      {
        id: 3,
        name: "Billie Ashley",
        salary: "6000",
        department: "Doctor"
      }
    ]
  }
  deleteUser =(id) => {
    this.setState({
      users: this.state.users.filter(user => id !== user.id)
    })
  }
  render(){
  return (
    <div className="container">
     <Navbar title='User App2'/>
     <hr/>
     <Users deleteUser={this.deleteUser()} users={this.state.users}/>
    </div>
  );
}
}
export default App;

User.js

import React, { Component } from 'react'
import PropTypes from 'prop-types'
class User extends Component {
    state = {
        isVisible : false
    }
    static defaultProps = {
        name: "No info",
        salary: "No info",
        department: "No info"
    }
    
    onClickEvent= (e) =>{
        this.setState({
            isVisible: !this.state.isVisible
        })
    }
    onDeleteUser = (e) => {
        const {id,deleteUser} = this.props;
        deleteUser(id);
    }
   
    render() {
        //Destructing
        const {name,department,salary} = this.props;
        const {isVisible} = this.state;
        return (
            <div className="col-md-8 mb-4">
               <div className="card">
                   <div className="card-header d-flex justify-content-between" style={{cursor:"pointer"}}>
        <h4 className="d-inline" onClick={this.onClickEvent.bind(this)}>{name}</h4>
        <i onClick={this.onDeleteUser} className="far fa-trash-alt" style={{cursor:"pointer"}}></i>
                   </div>
                   {
                       isVisible ?  <div className="card-body">
                       <p className="card-text">Salary: {salary}</p>
                       <p className="card-text">Department: {department}</p>
                                  </div> : null
                   }
               </div>
            </div>
        )
    }
}
User.propTypes = {
    name: PropTypes.string.isRequired,
    salary: PropTypes.string.isRequired,
    department: PropTypes.string.isRequired,
    deleteUser: PropTypes.func.isRequired
}
export default User;

Users.js

import React, { Component } from 'react';
import User from "./User";
import PropTypes from 'prop-types';
class Users extends Component {
    render() {
          const {users,deleteUser} = this.props;
        return (
            <div>
                {
                 users.map(user=>{
                    return(
                        <User 
                        key={user.id}
                        id={user.id}
                        name={user.name}
                        salary={user.salary}
                        department={user.department}
                        deleteUser={deleteUser}
                        />
                    )
                })
            }
            </div>
        )
    }
}
Users.propTypes = {
    users: PropTypes.array.isRequired,
    deleteUser: PropTypes.func.isRequired
}
export default Users;

可能与此有关:

<Users deleteUser={this.deleteUser()} users={this.state.users}/>

当你把 () 放在函数的末尾时,你所做的就是调用它(执行它)。当你想通过它时,你必须这样做:

<Users deleteUser={this.deleteUser} users={this.state.users}/>