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

超出了给定最大更新深度的setState的React Refs。

施赞
2023-03-14

嗨,伙计们,我试着使用Refs并给出这个。setState在其内部,但它给出:

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

我在做什么:

ref = {
  (anchor) => this.setState({
    anchor
  })
} >

但当我使用时:

ref = {
  (anchor) => this.state.anchor = anchor
} >

它的工作原理。

在其他组件中,我使用这个。setState也很好,有人为什么?

共有2个答案

习和通
2023-03-14

1)参考不得作为组件状态的一部分存储。只需将它分配给组件的成员,如下所示:

<div ref={ x => this.anchor = x } />

2) 切勿直接修改组件的状态。没有这个.state.x = 什么,使用 setState,以便 React 可以检测到更改并进行 UI 更新。

3) setState() 不能直接从渲染() 中调用(这会导致无限渲染循环)。

曹建华
2023-03-14

ref是React中的一个特殊道具。安装组件时,React将使用DOM元素调用ref回调,卸载时使用nullcallback调用它ref更新发生在componentDidMountcomponentDidUpdatelifecycle挂钩之前。因此,在第一个示例中,当refprops回调函数被执行时,在装载之前,您使用setState更改

但是在第二种情况下,你直接改变了状态,这在 React 中永远不应该完成,当你通过直接改变状态来更新状态时,它永远不会重新开始渲染。所以没有无限的召唤正在发生。它正常安装。

注意:< code>ref不是改变状态的地方。< code>Refs提供了一种方法来访问在render方法中创建的DOM节点或React元素。根据文件。

希望有帮助。

 类似资料:
  • 我在React中运行我的应用程序时收到一个错误。这个错误有很多问题,但我不知道如何解决它。当我按下链接时,它会指向登录组件。“http://localhost:3000/login” 这是我在网站上得到的错误: “已超出最大更新深度。当组件重复调用组件内部的 setState 时,可能会发生这种情况“组件将更新”或“组件更新”。React 限制了嵌套更新的数量,以防止无限循环。 这是我的登录页面:

  • 我得到了 错误:超过最大更新深度。当组件在componentWillUpdate或componentDidUpdate内重复调用setState时,可能会发生这种情况。React限制嵌套更新的数量,以防止无限循环。 但我读到的内容应该能够在componentDidMount中调用setState而不会出错。 }

  • 超过了最大更新深度。当组件重复调用组件WillUpdate或组件DidUpdate中的setState时,可能会发生这种情况。React限制嵌套更新的数量以防止无限循环。 这是bossinfo.js 这是user.redux.js 你为什么一直报告这个问题?这是指向错误的方向吗?寻求帮助

  • 问题内容: 我试图在ReactJS中切换组件的状态,但出现错误: 超过最大更新深度。当组件重复调用componentWillUpdate或componentDidUpdate内部的setState时,可能会发生这种情况。React限制了嵌套更新的数量,以防止无限循环。 我在代码中看不到无限循环,有人可以帮忙吗? ReactJS组件代码: 问题答案: 那是因为您在render方法中调用了toggle

  • 我在代码中没有看到无限循环,有人能帮忙吗? ReactJS组件代码:

  • 我正在用React做我的前几个实验,在这个组件中,我调用了一个外部API来获取所有NBA玩家的列表,通过作为组件道具接收的teamId过滤它们,最后呈现过滤玩家的标记。 一个需要考虑的问题是,由于我调用了API并获得了一个大列表,所以我将它保持在组件的状态,以便对该组件的新调用将使用该状态,而不是再次调用API。这不是生产代码,我没有API,所以我这样做是因为我收到了“太多请求”消息,因为我一直在