当前位置: 首页 > 知识库问答 >
问题:

为什么reactjs中的setState是异步而不是同步?

曾英睿
2023-03-14

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

现在这两样东西很难消化

  1. 在博客中,setstate函数是在函数updatestaste内部调用的,但是触发updatestaste函数的原因并不是被调用函数所知道的。
  2. 他们为什么要让setState异步,因为JS是单线程语言,而且这个setState不是WebAPI或服务器调用,所以只能在JS的线程上完成。他们这样做是为了使重新呈现不会停止所有事件侦听器和其他东西,还是有其他设计问题。

共有1个答案

林意蕴
2023-03-14

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

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

另外,如果一次有许多状态要更新,请将它们分组到同一个setstate:

而不是:

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

只要这样做:

this.setState({
    foo: "one",
    bar: "two"
});
 类似资料:
  • 问题内容: 嗯 我正在使用,由于某种原因,其后的代码无法访问新状态! 是什么赋予了?! 问题答案: 是的 它是异步的。我发布这个是因为这对于新的React用户而言并不是立即显而易见的。 反应“队列”更新到组件的状态。 如果您需要执行依赖于新状态更改的代码块,请像这样传递回调: 所有这些都在文档中,这只是真正需要重申的内容,以避免新的React用户可能遇到的常见错误。 签出: https //fac

  • 本文向大家介绍react中的setState是同步还是异步的呢?为什么state并不一定会同步更新?相关面试题,主要包含被问及react中的setState是同步还是异步的呢?为什么state并不一定会同步更新?时的应答技巧和注意事项,需要的朋友参考一下 [react] react中的setState是同步还是异步的呢?为什么state并不一定会同步更新?

  • 问题内容: 我试图了解某些“魔术”行为的根本原因,但我无法完全解释,而从阅读ReactJS源代码中看不出来。 当响应输入中的事件而同步调用该方法时,所有操作均按预期进行。输入的“新”值已经存在,因此DOM实际上并未更新。这是非常理想的,因为这意味着光标不会跳到输入框的末尾。 但是,当运行具有完全相同结构但 异步 调用的组件时,输入的“新”值似乎不存在,从而导致ReactJS实际触摸DOM,这将导致

  • 根据文件中的说明: setState()不会立即改变this.state,但会创建挂起的状态转换。调用此方法后访问this.state可能会返回现有值。 对setState的调用不能保证同步操作,可能会为了提高性能而对调用进行批处理。 因此,由于是异步的,因此无法保证其同步性能。是否有同步的替代方法。 例如 因为值是以前的值,所以什么是替代方案,将给予使用。 Stackoverflow上有几个问题

  • 问题内容: 我在创建的Web API中执行以下操作: 通过以下方式通过Jquery Ajax调用完成对此Web服务的调用: 我已经看到一些开发人员以这种方式实现了先前的操作: 不过,得说GetProductsWithHistory()是一个相当长的操作。考虑到我的问题和上下文,使webAPI操作异步将给我带来什么好处? 问题答案: 在您的特定示例中,该操作根本不是异步的,因此您正在执行的操作是异步

  • 我见过一些开发人员以这种方式实现前面的操作: 不过,不得不说,GetProductsWithHistory()是一个相当长的操作。考虑到我的问题和上下文,使webAPI操作异步对我有什么好处?