Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >何时使用setState回调参数而不是直接传递值

何时使用setState回调参数而不是直接传递值
EN

Stack Overflow用户
提问于 2021-02-05 21:30:25
回答 2查看 510关注 0票数 1

根据React,我发现有两种形式的setState

  • 表格1:setState({someState: someValue})
  • 表格2:setState((preState) => ({someState: doSomething(preState)}))

表单1直接设置状态,表单2使用回调函数设置状态。

正确使用状态部分,我被告知表格1可能不安全。这是否意味着我应该始终使用form 2来正确设置状态?我很快就注意到了另一个例子,它使用表单1更新状态。这是一个不正确的例子吗?

表格1和表格2可能都是正确的,但在何种情况下使用表格1是完全安全的,在何种情况下我应该使用表2?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-05 21:55:59

我在setState上写了一张便条。我希望它能帮助你正确地使用它。如果你真心实意地阅读并理解它,你将更善于利用它来管理状态。

setState

异步

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
state = { count: 0};
increment() {
    this.setState({ count: this.state.count + 1});
    this.setState({ count: this.state.count + 1});
    this.setState({ count: this.state.count + 1});
    console.log(this.state.count) // 0
}

increment() 
console.log(this.state.count); // 1

并且,this.state.count的最终值将在调用incemenent()完成后为1。

因为响应批处理所有调用,并计算出结果,然后有效地进行更改。这是一种纯JavaScript代码,合并到最后一个获胜的地方。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
newState = Object.assign(
    {},
    firstSetStateCall,
    secondSetStateCall,
    thirdSetStateCall,
);

因此,我们可以说,这里的一切都与JavaScript对象合并有关。所以还有另一种很酷的方法,我们用setState而不是object传递一个函数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
state = { count: 0};
increment() {
    this.setState( (state) => {  return { count: state.count + 1} } );
    this.setState( (state) => {  return { count: state.count + 1} } );
    this.setState( (state) => {  return { count: state.count + 1} } );
}

increment();
console.log(this.state.count) // 3

这一次,我们将得到3,因为以前可以合并对象,但是不可能合并函数,因此它的工作方式类似于同步。

但是这种在this.setState中传递参数的方法的另一个很好的应用是,您可以在从函数返回对象之前实现逻辑。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
this.setState( (state) => { if(state.count === 0) return { count: state.count + 1} } );

不仅如此,我们在setState中传递的函数接受另一个参数,props

this.setState((state, props) => { //play here })

但是,我们传递给它的函数会随着时间的推移变得混乱,那又怎样呢?只需建立一个常规的JavaScript函数

并将其传递给setState

this.setState(fn)

如果SetState是异步的,那么我们如何在状态更新之后执行操作呢?

setState实际上有两个参数,第二个参数是回调函数,在状态更新后调用,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
this.setState ( 
    (state, props) => { 
        // code here
    }, 
    () => {console.log("updated state", this.state)}
        
 )
票数 1
EN

Stack Overflow用户

发布于 2021-02-05 21:39:00

形式的选择取决于下一个状态是否使用当前状态的值。

如果新状态依赖于当前状态,则使用表单2,否则使用表单1。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66073880

复制
相关文章
何时使用Elasticsearch而不是MySql
MySQL 和 Elasticsearch 是两种不同的数据管理系统,它们各有优劣,适用于不同的场景
wayn
2023/08/28
3040
何时使用Elasticsearch而不是MySql
scrapy回调函数传递参数
scrapy.Request 的callback传参的两种方式 1.使用 lambda方式传递参数 def parse(self, response): for sel in response.xpath('//li[@class="clearfix"]/div[@class="list_con"]'): item=DmozItem() item['href']=sel.xpath('h2/a/@href').extract()[0] yield sc
用户1558882
2018/04/03
1.2K0
何时使用MongoDB而不是MySql
MySQL 和 MongoDB 是两个可用于存储和管理数据的数据库管理系统。MySQL 是一个关系数据库系统,以结构化表格格式存储数据。相比之下,MongoDB 以更灵活的格式将数据存储为 JSON 文档。两者都提供性能和可扩展性,但它们为不同的应用场景提供了更好的性能。
wayn
2023/08/09
1K0
何时使用MongoDB而不是MySql
何时使用Kafka而不是RabbitMQ
Kafka 和 RabbitMQ 都是流行的开源消息系统,它们可以在分布式系统中实现数据的可靠传输和处理。Kafka 和 RabbitMQ 有各自的优势和特点,它们适用于不同的场景和需求。本文将比较 Kafka 和 RabbitMQ 的主要区别,并分析何时使用 Kafka 而不是 RabbitMQ。
wayn
2023/06/26
3540
何时使用Kafka而不是RabbitMQ
何时使用Elasticsearch而不是MySql
MySQL 和 Elasticsearch 是两种不同的数据管理系统,它们各有优劣,适用于不同的场景。本文将从以下几个方面对它们进行比较和分析:
wayn
2023/08/09
6900
何时使用Elasticsearch而不是MySql
何时使用Kafka而不是RabbitMQ
Kafka 和 RabbitMQ 都是流行的开源消息系统,它们可以在分布式系统中实现数据的可靠传输和处理。Kafka 和 RabbitMQ 有各自的优势和特点,它们适用于不同的场景和需求。本文将比较 Kafka 和 RabbitMQ 的主要区别,并分析何时使用 Kafka 而不是 RabbitMQ。
wayn
2023/08/28
2600
何时使用Kafka而不是RabbitMQ
Scrapy回调函数callback传递参数的方式
默认Scrapy callback只能接函数名,不能传参数,我如果想给callback传递多个参数呢?
py3study
2020/11/06
2.7K0
React篇(026)-回调函数作为 `setState()` 参数的目的是什么?
当 setState 完成和组件渲染后,回调函数将会被调用。由于 `setState()` 是异步的,回调函数用于任何后续的操作。 **注意:** 建议使用生命周期方法而不是此回调函数。
齐丶先丶森
2022/05/12
1.2K0
回调参数详解
字面上的理解,回调函数就是传递一个参数化的函数,就是将这个函数作为一个参数传到另一个主函数里面,当那一个主函数执行完之后,再执行传进去的作为参数的函数。走这个过程的参数化的函数 就叫做回调函数。换个说法也就是被作为参数传递到另一个函数(主函数)的那个函数就叫做 回调函数
九霄道长
2021/03/02
2.7K0
Python参数传递,原来既不是传值也不是传引用
面试的时候,有没有被问到Python传参是传引用还是传值这种问题?有没有听到过Python传参既不是传值也不是传引用这种说法?一个小小的参数默认值也可能让代码出现难以查找的bug?
simpleapples
2018/10/16
8910
React 中setState更新state何时同步何时异步?
setState的“异步”并不是说内部由异步代码实现,本身的执行过程和代码都是同步的。
Clearlove
2021/03/17
2.2K0
Java 参数传递是值传递还是引用传递?
首先把结论表明,Java 的参数传递是值传递,因为有部分细节让人引起误解以为是引用传递,故我们写两个例子来举例探讨。
萬物並作吾以觀復
2019/05/10
2.8K0
java中的参数传递-值传递、引用传递
参数是按值而不是按引用传递的说明 Java 应用程序有且仅有的一种参数传递机制,即按值传递。
chenchenchen
2022/11/29
4.7K0
java中的参数传递-值传递、引用传递
如何通过JNI传递对象执行回调
JNI的全称是java native interface,用来调用某些特定于系统平台或者硬件的操作,但是它只能调用c/c++的代码,若是其它语言代码,只能通过c/c++进行二次调用。
全栈程序员站长
2021/05/08
2.5K0
Java的参数传递是值传递还是引用传递
当一个对象被当作参数传递到一个方法后,在此方法内可以改变这个对象的属性,那么这里到底是值传递还是引用传递?    答:是按值传递。Java 语言的参数传递只有按值传递。当一个实例对象作为参数被传递到方
nnngu
2018/03/15
3.3K0
Java的参数传递是值传递还是引用传递
回发或回调参数无效。在配置中使用 <pages enableEventValidation=”true”/> 或在页面中使用 <%@ Page EnableEventValidation=”true”
回发或回调参数无效。在配置中使用 <pages enableEventValidation=”true”/> 或在页面中使用 <%@ Page EnableEventValidation=”true” %> 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。
全栈程序员站长
2022/09/15
1.7K0
day134-scrapy的post请求&回调函数参数传递&代理池&并发
scrapy.FormRequest(),其中 formdata 参数接收的字典不能存在整数,必须是 str 类型,否则报错
少年包青菜
2020/05/07
1.2K0
Golang函数参数的值传递和引用传递
值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数
仙人技术
2021/08/31
2.5K0
Golang函数参数的值传递和引用传递
使用委托实现同步回调与异步回调
使用委托可以执行的一项有用操作是实现回调。回调是传入函数的方法,在函数结束执行时调用该方法。 例如,有一个执行一系列数学操作的函数。在调用该函数时,也向其传递一个回调方法,从而在函数完成其计算工作时,调用回调方法,向用户通知计算结果。 同步回调    首先声明两个方法: AddTwoNumbers():接受两个整型实参以及一个类型委托 ResultCallback():接受一个字符串,并显示出来。代码如下: using System; using System.Collections.Generic
hbbliyong
2018/03/05
3K0
使用委托实现同步回调与异步回调
DWR中传递外部数据给回调方法
DWR中传递外部数据给回调方法(Passing extra data to callbacks)
源哥
2019/05/26
8760

相似问题

何时使用React setState回调

51

React -将值传递给setState回调

112

在setState中直接参数和回调有什么区别?

11

何时在“`setState`”中使用对象而不是使用函数“`setState`”?

20

直接调用音频单元,而不是回调iOS

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文