当前位置: 首页 > 面试题库 >

Reactjs中有setState()的同步替代方法吗

蒋无尘
2023-03-14
问题内容

根据文档中的解释:

setState()不会立即更改this.state,但会创建一个挂起的状态转换。调用此方法后访问this.state可能会返回现有值。

无法保证对setState的调用的同步操作,并且可能会为提高性能而批量调用。

因此,由于setState()是异步的,因此无法保证其同步性能。是否有替代方案setState()是合时的。

例如

//initial value of cnt:0
this.setState({cnt:this.state.cnt+1})
alert(this.state.cnt);    //alert value:0

由于该alert值是先前的值,因此alert value:1使用的替代方案是什么setState()

关于Stackoverflow的问题很少,与此问题类似,但是没有哪里我可以找到正确的答案。


问题答案:

正如您从文档中阅读的那样,没有其他替代方法,原因是性能提高。

但是,我假设您要在更改状态后执行一项操作,可以通过以下方法实现此目的:

class MyComponent extends React.Component {

  constructor(props) {

    super(props);

    this.state = {

     x: 1

    };



    console.log('initial state', this.state);

  }



  updateState = () => {

   console.log('changing state');

    this.setState({

      x: 2

    },() => { console.log('new state', this.state); })

  }



  render() {

    return (

      <div>

      <button onClick={this.updateState}>Change state</button>

    </div>

    );



  }

}



ReactDOM.render(

  <MyComponent />,

  document.getElementById("react")

);


<div id="react"></div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>


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

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

  • 问题内容: 我有一个超类的方法: 在其子类之一中,我想执行以下操作: 但这是行不通的。问题是我有一个超类的引用,并且我想只在其中一个子类中调用此方法。 问题答案: 您不能在重写方法中更改类型参数的数量。对于您的情况,返回类型显然会覆盖失败。但是,即使返回类型相同,您的方法仍然不会被覆盖等效,因为您应该覆盖的方法中的类型参数更少。 从JLS- 方法签名 : 如果两个方法具有相同的名称和参数类型,则它

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

  • 问题内容: 我正在查看包含同步方法的第三方库中的一些代码,在此方法中,有一个锁定在实例变量上的同步块。与此类似: 这有意义吗?如果是这样,在同步方法中使用同步语句有什么好处? 鉴于同步方法锁定了整个对象,对我来说似乎是多余的。在使用非私有的实例变量时,这种方法是否有意义? 问题答案: 在您的示例中,该方法 同时 锁定了和的实例。其他方法可能仅锁定对象的实例 或 对象。 因此,是的,这完全取决于他们

  • 我一直在通过Netbeans使用CodeNameOne设计一个应用程序,并遇到了一些问题,特别是“找不到符号”编译错误。经过进一步的研究,我发现这是由于CNO不支持某些库/杂项。 我想知道是否有其他方法可以使用以下库/执行任务: (从文件读取)导入java.io.file;符号:类文件位置:package java.io (抛出FileNotFoundException)导入java.io.Fil