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

如何在反应中超出最大更新深度

元望
2023-03-14

我只想渲染一次拖动,但渲染的是无限循环。我在这个项目中使用反应Dnd方法

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

chichihandler = (id) => {
    console.log('inApp', id);
    this.setState({
        hoverdID: 123
    })
    console.log("hoverd", this.state.hoverdID)
}
render() {
    return (
        <div className="all">
            <Header />
            <div className='Products_list'  >
                {this.state.productData.map((item) => (
                    <Products key={item.id} item={item} handleDrop={(productId) => this.addItem(productId)} />
                ))}
            </div>
            <div className='Store_list' >
                <div className="storeName" >Store Name</div>
                {this.state.storeData.map((itemS) => (
                    <Store key={itemS.code} itemS={itemS} chichi={(id) => this.chichihandler(id)} />
                ))}
            </div>
        </div>
    )
}

< code>storeData代码:

import React, { Component } from 'react'
import { DropTarget } from 'react-dnd'
function collect(connect, monitor) {
    return {
        connectDropTarget: connect.dropTarget(),
        hovered: monitor.isOver(),
        item: monitor.getItem()
    }
}
class Store extends Component {
    render() {
        const { connectDropTarget, hovered, itemS } = this.props
        const backcgroundColor = hovered ? 'lightgreen' : ''
        if (hovered) {
            this.props.chichi(itemS.name)
            console.log(itemS.name)
        }
        return connectDropTarget(
            <div>
                <div id={itemS.code} className='Store' style={{ background: backcgroundColor }}>
                    {this.props.itemS.name}
                </div>
            </div>
        )
    }
}

export default DropTarget('item', {}, collect)(Store)

共有1个答案

云炜
2023-03-14

循环发生在Store组件的渲染方法中,其中它

  • 这叫做 itemS.name,
  • 调用您的奇奇汉德勒()函数,其中
  • 在父组件上调用此 .setState(),组件
  • 触发重新渲染,该渲染
  • 导致存储重新渲染,这...

看起来你希望当用户悬停在某个东西上时调用< code>chichi函数,在这种情况下,你最好对有问题的元素使用< code>onMouseOver prop,而不是试图用props来做这件事(更多信息请参见https://reactjs.org/docs/events.html#mouse-events)。

通常,您不应该在render()中使用从调用setState(),因为它会导致这类循环。

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

  • 当我运行我的代码时,我收到了这个错误。 超过了最大更新深度。当组件重复调用组件WillUpdate或组件DidUpdate中的setState时,可能会发生这种情况。React限制嵌套更新的数量以防止无限循环。 这是代码。它在引用。 我按照React网站上的文章所说的方式设置了我的东西,它“来了”于这个简洁的控制台类型,这就是我产生上述代码的地方。我对React、JSX和Javascript(以及

  • 我目前收到Maxiumum更新深度错误,不知道为什么。在我的代码中看不到无限循环。 "超过了最大更新深度。当组件在useEffect内部调用setState时,可能会发生这种情况,但useEffect要么没有依赖关系数组,要么其中一个依赖关系在每次渲染时都会发生变化。 此处显示错误 ReactJS组件代码: 下面的代码似乎有错误:超过了最大更新深度。当组件在useEffect中调用setState

  • 我正在使用FullCalendar进行反应,我正在与状态作斗争……它返回以下消息: 错误:超过最大更新深度。当组件在componentWillUpdate或componentDidUpdate内重复调用setState时,可能会发生这种情况。React限制嵌套更新的数量,以防止无限循环。 我删除了代码中所有不必要的部分。 如果您想让我提供更多信息,请告诉我。欢迎任何反馈/想法!谢谢

  • 这是我的一段代码: 但这给了我错误,说超过了最大更新深度。当组件重复调用组件内部的 setState 时,可能会发生这种情况“组件将更新”或“组件更新”。React 限制嵌套更新的数量,以防止无限循环。 这是一个快照: 我该如何解决这个问题?

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