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

何时使用React setState回调

谢洛城
2023-03-14

当react组件状态发生更改时,将调用render方法。因此,对于任何状态更改,都可以在呈现方法体中执行操作。那么setState回调是否有特定的用例?

共有1个答案

曾典
2023-03-14

是的,因为setstate异步的方式工作。这意味着在调用setstate之后,this.state变量不会立即更改。因此,如果您希望在对状态变量设置state后立即执行操作,然后返回结果,则回调将非常有用

考虑下面的示例

....
changeTitle: function changeTitle (event) {
  this.setState({ title: event.target.value });
  this.validateTitle();
},
validateTitle: function validateTitle () {
  if (this.state.title.length === 0) {
    this.setState({ titleError: "Title can't be blank" });
  }
},
....

上面的代码可能无法按预期工作,因为title变量在对其执行验证之前可能没有发生突变。现在,您可能想知道我们是否可以在render()函数本身中执行验证,但是如果我们能够在changeTitle函数本身中处理这个问题,这将是一种更好、更干净的方法,因为这将使您的代码更有条理、更容易理解

在这种情况下,回调很有用

....
changeTitle: function changeTitle (event) {
  this.setState({ title: event.target.value }, function() {
    this.validateTitle();
  });

},
validateTitle: function validateTitle () {
  if (this.state.title.length === 0) {
    this.setState({ titleError: "Title can't be blank" });
  }
},
....

另一个例子是当您想要dispate并在状态改变时执行操作时。您将希望在回调中执行,而不是render(),因为每次发生重新呈现时都会调用它,因此在需要回调的情况下,可能会出现许多这样的情况。

另一种情况是API调用

当您需要根据特定的状态更改进行API调用时,可能会出现这样的情况,如果您在render方法中这样做,则在每次renderonstate更改时,或者因为某个传递给子组件的Prop更改时,都会调用它。

在本例中,您需要使用setstate回调将更新的状态值传递给API调用

....
changeTitle: function (event) {
  this.setState({ title: event.target.value }, () => this.APICallFunction());
},
APICallFunction: function () {
  // Call API with the updated value
}
....
 类似资料:
  • 我想针对使用回调参数的RESTendpoint编写一些测试。可能听起来很困惑,所以这里有一个解释: > 服务器回复200和一些json 服务器向(基于提供的回调URL),带有一些json负载 我使用TestNG和Rest assured(非强制性)构建了一个测试。我的问题是如何验证初始回复和在回调URL处接收的消息。我首先想到的一种(可能是幼稚的)方法是实现一个HTTP服务器,它侦听,当有东西出现

  • 问题内容: 我对虚无和回报有些“困惑”。通常,我知道在方法中使用void而不返回任何内容,而当我想将某些内容返回到调用代码时,则在方法中使用return。 但是在下面的代码中,我可以同时使用两者,而我的问题是,使用哪个? 以及如何确定?与性能有关吗? 通常,在两种情况下我的结果相同。 谢谢! 问题答案: 此方法: 您更改的内部状态,但此方法的调用者不知道的最终值。 在以下方法中,您将提示调用者的最

  • 问题内容: 民间, 我试图了解MomentJS API。在机器上获取当前时间的合适方法是什么? 与 试图解析他们的文档,并且不清楚使用什么。 http://momentjs.com/docs/#/query/is-a- moment/ 问题答案: 在这里,您要为CurrentDate分配一个momentjs实例: 这里只是一个字符串,是momentjs实例的默认格式的结果: 这里是自一月…以来的秒

  • 问题内容: 场景 :考虑以下是节点Web应用程序的代码部分。 问题 :我正在检查公正或公正哪一个。上面的示例代码对两者的工作原理完全相同,并且在执行方面没有任何区别。 问题 : 有人 可以对此加以说明,何时使用和何时使用以及一些重要的区别吗? 问题答案: 有人总是写是为了确保执行在触发回调后停止。 如果您不这样做,则可能要冒第二次触发回调的风险,这通常会造成灾难性的后果。您的代码可以正常使用,但我

  • 在spark中使用mapPartitionsToPair/PairFlatMapFunction时,我在Internet上找到了一个类似的例子 但当康普利 我找到了的声明 所以调用应该是返回一个迭代器。 因此,有人能帮助我如何返回在javaRDD api火花迭代器?谢谢 PS:我试过下面这样的代码,但在集群上不起作用: