首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在等待之后调用setState时,状态立即可用

在等待之后调用setState时,状态立即可用
EN

Stack Overflow用户
提问于 2019-04-12 20:08:53
回答 1查看 244关注 0票数 9

在等待另一个函数并将状态记录到控制台后调用setState时,该值立即可用。

我知道setState是异步的,在所有其他情况下,它不会在调用它之后立即可用(但可以在setState回调中使用)

在不等待的情况下使用时(预期)

代码语言:javascript
运行
复制
// inital value state is 0
const response = fetchSomething()
this.setState({
  value: 5
})

console.log(this.state.value) // prints 0

与await连用

代码语言:javascript
运行
复制
// inital value state is 0
const response = await fetchSomething()
this.setState({
  value: 5
})

console.log(this.state.value) // prints 5

这里我漏掉了什么?

EN

回答 1

Stack Overflow用户

发布于 2019-04-12 20:20:45

当你创建了一个函数async并且你await了一些表达式,在等待的promise在幕后被解析之后,下面的语句将会运行。

文档中声明了setState() does not immediately update the component,通常不会,但在这种情况下,当您在事件处理程序中解析promise之后更新状态时,状态会立即更新。

示例

代码语言:javascript
运行
复制
class App extends React.Component {
  state = {
    value: 0
  };

  asyncClick = () => {
    Promise.resolve().then(() => {
      this.setState({
        value: 5
      });

      console.log(this.state.value);
    });
  };

  syncClick = () => {
    this.setState({
      value: 5
    });

    console.log(this.state.value);
  };

  render() {
    return (
      <div>
        <div>{this.state.value}</div>
        <button onClick={this.asyncClick}>Async click</button>
        <button onClick={this.syncClick}>Sync click</button>
      </div>
    );
  }
}

ReactDOM.render(<App />, document.getElementById("root"));
代码语言:javascript
运行
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

<div id="root"></div>

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55651303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档