如果可以使用 async/await 使 React 的 setState 同步会怎样

IT技术 reactjs
2021-03-25 14:42:24

由于 React 的setState函数是异步的,因此您无法在同一个函数调用中访问新更新的状态this.setState,在 setState 上使用 async/await 的优缺点是什么,例如await this.setState({ newState });

2个回答

没有优点,因为this.setState不返回Promise并且awaiting 它没有很好的用途。

它应该被promisified以便与await

const setStateAsync = updater => new Promise(resolve => this.setState(updater, resolve))

由于setState通常如何使用,通常不会有太多使用如果需要依赖先前设置的状态,可以使用更新程序功能。

这是一个使用相同想法的沙箱codeandbox.io/s/4wxoyrpknw
2021-05-29 14:42:24

await关键字需要用于返回 Promise 的表达式,尽管setState它是异步的,但它不返回 Promise,因此 await 无法使用它。setState提供一个callback跟踪是否已完成。

你会使用回调

this.setState({
   newState
}, () => {
    console.log(this.state.newState)
})

Here is a demo 这表明 setState 不适用于 async await

如果您正确地Promise状态然后等待它,它就会起作用。codeandbox.io/s/4wxoyrpknw
2021-06-03 14:42:24
@nrgwsth 我知道如果您Promise操作它会起作用,但是您不需要这样做,因为它已经提供了一个回调并将其包装到一个Promise中,以便您可以使用 await 没有意义。它也会在您的应用程序中引入复杂性。setState 回调以及其他生命周期方法往往可以解决大部分问题
2021-06-18 14:42:24