【发布时间】:2020-11-22 07:19:13
【问题描述】:
所以我有这个块,如果我不使用 async/await,它将无法工作。我的问题是我知道 setState 是异步的,但 then 块是否会先确保 setWowfinish 在继续 console.log 部分之前先完成?谢谢!
const [wow, setWow]=useState(null);
submitForm(payload)
.then(async() => await setWow("djflajdlk"))// if I don't use async/await, it will not work
.then(() => console.log(wow))
.catch(err => alert(err.message))
}
【问题讨论】:
-
流浪的
}从何而来?您发布的代码中的任何内容都不会改变wow变量,所以我非常怀疑使用async会有所作为。它将始终记录useState(null)返回的值。 -
我建议您将
console.log(wow)放在const [wow, setWow]=useState(null);之后,而不是放在承诺链中。如果你真的需要在 Promise 链中使用新值,我建议使用submitForm(payload).then(result => { setWow(result); console.log(result); }).catch(console.error);而不是wow。 -
@Bergi
}是一个错误对不起...但是setWow不是正在改变wow的值吗? -
不,它正在改变状态,这会导致 React 再次渲染组件,并且在该函数调用中
wow将有一个新值。const wow = …应该清楚它不会改变。
标签: javascript reactjs asynchronous state setstate