此问题已在此处有答案:
The useState set method is not reflecting a change immediately(17回答)
5天前关闭。
我有以下刷新状态的函数
const refreshAfterCreate = async () => {
try {
const res = await fetch(process.env.NEXT_PUBLIC_MICROSERVICE_COMPANY_URL + '/companies', {method: 'GET'});
const data = await res.json();
await setCompanies(data);
} catch (error) {
console.error('Error al realizar el fetch:', error);
}
try {
const res = await fetch(process.env.NEXT_PUBLIC_MICROSERVICE_SERVICE_URL + '/services', {method: 'GET'});
const data = await res.json();
await setServices(data);
} catch (error) {
console.error('Error al realizar el fetch:', error);
}
};
使用await调用函数后,我console.log(companies)和console.log(services),并且是以前的数据。
我尝试添加这些useEffects
useEffect(() => {
console.log('Companies Updated', companies);
}, [companies]);
useEffect(() => {
console.log('Services Updated', services);
}, [services]);
这些工作是因为它记录更新的值。当我调用上面的函数并记录所有内容时,它首先更新值,然后返回到以前的状态,这张图片有助于理解。
我该怎么解决这个问题?
1条答案
按热度按时间wlsrxk511#
这是因为setState不会立即执行,如果您想访问最近更新的数据,您有两种方法
额外提示:不要使用await setState,因为setState不返回promise,没有必要这样做