当前位置: 首页 > 知识库问答 >
问题:

React,HTML和JavaScript:错误:超过最大更新深度

皇甫飞飙
2023-03-14

在我的React应用程序中,我收到以下错误:“错误:超过了最大更新深度。当组件重复调用组件内部的setState时,可能会发生这种情况。React限制嵌套更新的数量,以防止无限循环”。一旦for循环完成,我就改变了状态。我不知道我做错了什么。任何帮助都将不胜感激。

//React
class Pagination extends Component {
  state = {
    li: []
  }

  liTags = (pageNum) =>{
    return(  <li className="PageNumber" key={pageNum}><span>{pageNum}</span></li>)
  }

  pagincationScript = (totalPages, page) =>{
    let li = []

    for(let i = 1; i < totalPages; i++){
      li.push(this.liTags(i))

    }
    this.setState({
      li: li
    })

    if(page > 1 && page < totalPages){
    
      return(
        <React.Fragment>
          <li className="Btn Previous"><span><i>&#8592;</i>Previous</span></li>
          {this.state.li}
          <li className="Btn Previous"><span><i>&#8594;</i>Next</span></li>
        </React.Fragment>
      )
    }
  }

  render() {
    return (
      <div className="Pagination">
        <ul>
          {this.pagincationScript(10,5)}
        </ul>
      </div>
    )
  }
}

export default PagePagination;

共有2个答案

叶德运
2023-03-14

将您的liTags()移到paginationScript()内,并将

郦良才
2023-03-14

您基本上是在导致堆栈溢出。
您在渲染中调用setState,但是,因为setState调度另一个渲染,您的代码会导致无限循环。

您需要停止调用this.setState每次渲染。
在您的例子中,您不需要将li放在组件的状态中,您可以简单地渲染{li}

pagincationScript = (totalPages, page) => {
  let li = []

  for(let i = 1; i < totalPages; i++) {
    li.push(this.liTags(i))
  }

  if(page > 1 && page < totalPages) {

    return(
      <React.Fragment>
        <li className="Btn Previous"><span><i>&#8592;</i>Previous</span></li>
          {li}
        <li className="Btn Previous"><span><i>&#8594;</i>Next</span></li>
      </React.Fragment>
    )
  }
}

但是,如果需要它位于状态内,则应将填充 this.state.li 的代码移动到生命周期方法,如 componentDidUpdate(如果使用钩子,则应使用Effect)。

 类似资料:
  • 我按照这个教程在React with Redux中实现了一个简单的登录表单:https://js lancer . com/blog/2017/04/27/a-simple-log in-flow-with-React-and-Redux/ 一切正常,但当我添加cookie时,我收到错误: 警告:在现有状态转换期间(例如在中)无法更新。渲染方法应该是道具和状态的纯粹函数。 以及: 未捕获的不变违规

  • 我遇到一个错误: 超过了最大更新深度。当组件重复调用componentWillUpdate或componentDidUpdate内部的setState时,会发生这种情况。React限制嵌套更新的数量,以防止无限循环。 我的代码是: 我有另一个使用路由器切换页面的组件,以及一个包含登录页面的邮件组件。

  • 早上好,我正在开发一个React应用程序,通过REST API与后端通信。 该应用程序体系结构还使用 React 路由器,并使用服务器提供并存储在中的 JWT 令牌实现身份验证功能。 基本上: 用户连接到应用程序 如果用户未登录,则重定向到登录页面 登录后,它会重定向到带有路径的主页,其中应该显示带有路径的组件和带有路径的组件(如果一个很好地理解React路由器的工作) 在启动应用程序时,用户被正

  • 我有以下组件:- 我得到了错误:- 我怀疑它必须对多次调用setState的Submit按钮(onClick)做一些事情,但是我似乎无法解决问题。 因此,我有以下问题:- 如何修复点击()? 我想点击开始游戏按钮,然后触发 并 这样我就可以填满套牌,套牌1和套牌2。有没有办法做到这一点?目前,我已经创建了一个这取决于正在填充的甲板,这是用钩子做的正确方法吗? 谢谢你的帮助和时间!

  • 尝试在基本应用程序中包含 react-table,该应用程序在字段中接受输入,在字段内容更改时将其存储在组件状态中,然后在按下按钮时从 Github 获取数据。 在我加上线之前一切正常 该页面可以正常加载,但是当输入字段改变时(即你在其中输入),应用程序崩溃并显示错误: 错误:超过了最大更新深度。当组件重复调用componentWillUpdate或componentDidUpdate内部的set

  • 我有这个错误:错误:超过最大更新深度。当组件重复调用componentWillUpdate或componentDidUpdate内部的setState时,会发生这种情况。React限制嵌套更新的数量,以防止无限循环。 但是我不明白怎么解决!我只是在发布我的代码,对不起… 我的代码: