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

RESOLVE:反应错误:超过最大更新深度

公羊安怡
2023-03-14

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

但是我不明白怎么解决!我只是在发布我的代码,对不起…

我的代码:

{this.state.messages.map(message =>
                        <li>
                            <p id="author">{message.message.author}</p>
                            <p id="date">{message.message.date}</p><br/>
                            <p id="message-content">{message.message.content}</p>
                            <button class="delete-button" type="submit" onClick={() => this.delete(message._id)}>suprimmer</button>
                            {this.state.setModify & this.state.idModify === message._id ?
                                <div id="modify-menu">
                                    {this.setState({modify: message.message.content})}
                                    <input class="modify-input" id={message._id} type="text" name="modify" value={this.state.modify} onChange={this.handleChangeModify.bind(this)}/>
                                    <button class="modify-send" id={message._id} type="submit" onClick={() => this.modify(message._id)}>envoyer</button>
                                    <button class="modify-cancel" id={message._id} type="submit" onClick={() => this.setState({setModify: false})}>annuler</button>
                                </div>:
                                <button class="modify-button" id={message._id} type="submit" onClick={this.activeModify.bind(this)}>modifier</button>
                            }
                            <hr></hr>
                        </li>
                    )}

共有2个答案

单于高逸
2023-03-14

好的,我用这段代码解决了我的问题:

activeModify(event){
    event.persist();
    this.setState({
        setModify: true,
        idModify: event.target.id
    })
    this.state.messages.map(message => {
        if (message._id === event.target.id) {
            this.setState({
                modify: message.message.content
            });
        }
    });
}
郭思聪
2023-03-14

您正在渲染中使用{this.setState({modify:message.message.content})}。对于数组的每个元素this.state。消息它在状态中重新呈现修改对象。

您应该将{this.setState({modify:message.message.content})}调用移动到onClickonChange超过了最大更新深度

无需在渲染时设置修改字段,您可以直接在组件DidMount中执行此操作:

    componentDidMount() {
        axios.get(`http://localhost:8080/messages`)
            .then(res => {
                const messages = res.data;
                this.setState({
                    messages: messages,
                    message: '',
                    modify: messages.map(message => message.message.content),
                });
            })
    }
 类似资料:
  • 早上好,我正在开发一个React应用程序,通过REST API与后端通信。 该应用程序体系结构还使用 React 路由器,并使用服务器提供并存储在中的 JWT 令牌实现身份验证功能。 基本上: 用户连接到应用程序 如果用户未登录,则重定向到登录页面 登录后,它会重定向到带有路径的主页,其中应该显示带有路径的组件和带有路径的组件(如果一个很好地理解React路由器的工作) 在启动应用程序时,用户被正

  • 我试图在参数更改时映射我的 redux 数组。它按预期呈现,但我在控制台中收到此错误。尝试了一些对useeffect的依赖性,但无法修复它。不知道为什么会发生这种情况。感谢您的帮助。 错误; 超过最大更新深度。当组件在useEffect中调用setState时,可能会发生这种情况,但useEfect要么没有依赖项数组,要么在每次渲染时都会更改其中一个依赖项。 我的代码;

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

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

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

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