当react组件状态发生更改时,将调用render方法。因此,对于任何状态更改,都可以在呈现方法体中执行操作。那么setState回调是否有特定的用例?
是的,因为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:我试过下面这样的代码,但在集群上不起作用:
获取值GSON