Aync是否可以与React setState方法一起使用?

时间:2019-06-10 15:02:11

标签: javascript reactjs async-await

有人可以帮助澄清React setState方法中异步/等待的使用吗?我认为这仅适用于Promises。我找不到适合的文档。请有人帮忙!

我的应用程序中有类似的内容,并且它通常可以正常工作:

aync setNewName {
  this.setState({ name: "boo" });
  console.log(this.state); //prints most recent state - {name: 'boo'}
};

为什么起作用?之所以有效,是因为在这种情况下,状态在执行console语句之前迅速更新了?是否保证其他情况下的同步执行?

2 个答案:

答案 0 :(得分:0)

此:

  

阐明React setState方法中对async / await的使用

在提供的代码中,async只是将调用包装到setState()

此:

  

我认为这仅适用于Promises。

假设“它”的意思是async/await,那么这是对的。您没有意识到的是setState()函数被包装在Promise中,而不是表现

此:

  

我的应用程序中有类似的内容,并且它通常可以正常工作:

该代码将始终起作用。为什么?因为它只是简单地同步执行。函数调用产生了一个Promised对象,因为它被声明为async

此:

  

它起作用了,因为在这种情况下,状态会在   执行控制台语句?

[EDIT] 不,这与状态更新时的无关 是的,很可能是这样。这段代码不会“等待setState()完成,但是在这种情况下,它将立即完成。

工作方式是:

  1. 创建承诺
  2. 执行setState()
  3. 执行console.log()
  4. 立即解决Promise(因为没有异步操作

此:

  

是否可以保证在其他情况下同步执行?

否。

答案 1 :(得分:-1)

Java脚本将在bit位开始执行异步代码之前执行所有同步代码。第一个控制台日志已同步,因此已执行。然后执行setState。由于setState是异步的,因此您可以将其视为Promise,当实际设置状态时即可解决。设置状态后,将执行await回调。您可以将其视为诺言已解决。