我试图在返回中直接更新状态,而不使用任何生命周期方法,并得到这样的错误:
超过最大更新深度。当组件在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;
我写了上面的代码,得到了错误,但在控制台的状态值得到更新,并打印了很多次。
>
出现此错误是因为每当组件渲染时,setState
都会触发组件的重新渲染。这会导致无休止的更新循环。
除非shouldComponentUpdate()返回false,否则setState()将始终导致重新渲染。
是的,需要使用函数或生命周期方法来更新状态。您不能直接在呈现函数中更新状态。您应该在渲染之前为渲染准备好数据,并且应该在生命周期方法或回调中更新状态。
这是因为您在渲染方法中使用了setState。您不能在渲染方法中使用setState,因为它会导致组件一次又一次地重新渲染。因为在反应应用程序中,只有当道具传递到该组件或调用setState
时,组件才会重新渲染。
因此,您可以使用组件didMount
生命周期来设置状态。