提问者:小点点

尝试更新状态使用setstate内部的返回反应组件,并获得"最大更新深度超过错误"?


我试图在返回中直接更新状态,而不使用任何生命周期方法,并得到这样的错误:

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

由于上述错误,我参考了此链接,但没有得到适当的解决方案。是否总是需要使用函数或生命周期方法来更新状态?

import React, { Component } from "react";

import "./App.css";

class App extends Component {
  state = {
    name: "john"
  };

  render() {
    console.log(this.state);
    return (
      <div className="App">
        <header className="App-header">
          {this.state.name}
          {this.setState({ name: "abc" })}
        </header>
      </div>
    );
  }
}

export default App;

我写了上面的代码,得到了错误,但在控制台的状态值得到更新,并打印了很多次。


共2个答案

匿名用户

>

  • 出现此错误是因为每当组件渲染时,setState都会触发组件的重新渲染。这会导致无休止的更新循环。

    除非shouldComponentUpdate()返回false,否则setState()将始终导致重新渲染。

    是的,需要使用函数或生命周期方法来更新状态。您不能直接在呈现函数中更新状态。您应该在渲染之前为渲染准备好数据,并且应该在生命周期方法或回调中更新状态。

  • 匿名用户

    这是因为您在渲染方法中使用了setState。您不能在渲染方法中使用setState,因为它会导致组件一次又一次地重新渲染。因为在反应应用程序中,只有当道具传递到该组件或调用setState时,组件才会重新渲染。

    因此,您可以使用组件didMount生命周期来设置状态。