类组件中在async await中 this.setState之后 render为什么拿不到值
时间: 2024-10-12 17:12:29 浏览: 30
native-async-await-zone
在React中,`setState` 是异步操作,当在 `async/await` 或者 `.then()` 的回调函数中调用它时,新的状态并不会立即更新到组件实例的状态。当你尝试在 `render` 函数内获取新设置的状态时,它还是旧的状态,因为 React 的渲染过程是在状态变化发生之前完成的。
解决这个问题的一个常见做法是在 `setState` 中传入一个回调函数或者使用 `useEffect` 钩子。例如:
```jsx
componentDidUpdate(prevProps, prevState) {
if (newState !== prevState) {
// 这里可以添加一个定时器或者useEffect,确保在下次render前state已更新
setTimeout(() => {
this.setState(newState, () => {
// 在这里,this.setState完成后会触发额外的一次render,这时你可以访问最新的state
// ...你的代码...
});
}, 0); // 设置一个极短的延迟
}
}
```
或者使用 `useEffect`:
```jsx
useEffect(() => {
const fetchData = async () => {
// 异步操作后更新状态
await yourAsyncFunction();
this.setState(newState);
};
// 在数据加载完成后重新渲染
fetchData().then(() => forceUpdate());
}, [yourDataThatDependsOnState]); // 只有当依赖的数据改变时才触发
```
阅读全文