我刚刚发现在 react this.setState() 任何组件中的函数都是异步的,或者在调用它的函数完成后被调用。

现在我搜索并找到了这个博客(setState() State Mutation Operation May Be Synchronous In ReactJS)

在这里他发现 setState 是异步的(当堆栈为空时调用)还是同步的(一旦被调用就调用)取决于状态变化是如何触发的。

现在这两件事很难消化

  • 在博客中 setState 函数在函数 updateState 内被调用,但是触发 updateState 函数的原因并不知道。
  • 为什么他们会让 setState 异步,因为 JS 是单线程语言,而且这个 setState 不是 WebAPI 或服务器调用,所以只能在 JS 的线程上完成。他们这样做是为了使重新渲染不会停止所有事件监听器和其他东西,还是存在其他一些设计问题。
  • 最佳答案

    您可以在状态值更新后调用函数:

    this.setState({foo: 'bar'}, () => {
        // Do something here.
    });
    

    此外,如果您有很多状态要一次更新,请将它们全部分组在同一个 setState 中:

    代替:
    this.setState({foo: "one"}, () => {
        this.setState({bar: "two"});
    });
    

    只需这样做:
    this.setState({
        foo: "one",
        bar: "two"
    });
    

    关于javascript - 为什么reactjs Async 中的setState 是Async 而不是Sync?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36085726/

    10-13 03:28