Reactjs 为什么我能';即使有条件,也不能从componentDidUpdate内部设置状态?
我正在比较Reactjs 为什么我能';即使有条件,也不能从componentDidUpdate内部设置状态?,reactjs,Reactjs,我正在比较componentdiddupdate中的道具,并尝试更新状态,然后获取一些数据(这取决于一些状态参数) 但是,正如问题所示,当我要获取数据时,函数使用的是前一个状态 沙箱: 要评估错误,请执行以下操作:使用导航栏搜索其中一个实体。检查控制台以查看状态。在导航栏中对同一实体进行另一次搜索。再次检查控制台,查看未更改的状态 我做错了什么 非常感谢 这是因为setState是异步的,并且在调用后不会立即设置该值。您应该使用它的回调进行后续操作 setState(updater, [call
componentdiddupdate
中的道具,并尝试更新状态,然后获取一些数据(这取决于一些状态参数)
但是,正如问题所示,当我要获取数据时,函数使用的是前一个状态
沙箱:
要评估错误,请执行以下操作:使用导航栏搜索其中一个实体。检查控制台以查看状态。在导航栏中对同一实体进行另一次搜索。再次检查控制台,查看未更改的状态
我做错了什么
非常感谢 这是因为
setState
是异步的,并且在调用后不会立即设置该值。您应该使用它的回调进行后续操作
setState(updater, [callback]);
当您要在更新状态值之后立即使用它们时,这非常有用。因此,你应该:
componentDidUpdate(prevProps) {
if (prevProps.location.search.split("?description=")[1] !==
this.props.location.search.split("?description=")[1]) {
this.setState({
searchParams: this.getInitialSearchParams(),
isLoaded: false,
entities: []
}, this.fetchMore); //or () => this.fetchMore() if you want to send params
}
}
您可以在此处阅读有关setState
的更多信息:
了解setState和React的生命周期也是非常有用的
希望这是有帮助的
componentDidUpdate(prevProps) {
if (prevProps.location.search.split("?description=")[1] !==
this.props.location.search.split("?description=")[1]) {
this.setState({
searchParams: this.getInitialSearchParams(),
isLoaded: false,
entities: []
}, this.fetchMore); //or () => this.fetchMore() if you want to send params
}
}