setState是同步还是异步

本文探讨React中setState的同步与异步性质。setState实际上是一个异步操作,为了优化性能,避免频繁渲染。当需要依赖当前状态更新时,应传递函数而非对象。文章通过实例说明了传递对象和函数的区别,并指出在处理异步更新时应注意的问题。
摘要由CSDN通过智能技术生成
同步异步探讨
关于setState附上官网地址一份

setState描述

其实探讨是否是同步还是异步这个问题很好理解,可结合EventLoop来参照

  • 能紧随其后拿到结果的可以认为同步(简单理解哈,一些场景暂不考虑,就像有一些属于异步的但是异步任务刚好都结束了,直接拿到了对应的结果等)
  • 至于异步,他添加在异步队列,不影响同步任务的执行,在所有的同步任务执行完它才会按照顺序开始执行队列里面的任务,有一个等待的过程

而setState它是属于异步任务,试想一下,如果它是同步更新的,那我们每次setState一次就更新会浪费多少渲染消耗,一个页面可能十来个就要渲染十几次,无疑浪费性能开销。所以他设计成了异步任务,将其统一添加到异步队列里面,等待所有的函数等同步任务执行完之后,统一执行setstate更新状态,就像vue的异步事件队列一样。nexttick的设计也是利用这种思想来设计,利用新开启的异步队列延迟执行

setState使用

基本使用
这只是简单的赋值,但是我们是不能直接在下面拿到count的值为10 的

add () {
   
    this.setState({
   
        count:10
    })
    // 这里拿不到
    console.log(this.state
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: setState既可以是同步的,也可以是异步的,取决于它被调用的环境。在异步环境中,如promise的then()方法、setTimeOut()、setInterVal()、ajax的回调等,setState异步的。而在同步环境中,setState同步的。\[1\]举个例子来说,如果在一个同步环境中调用setState,那么setState异步的,因为它还未被赋值。而如果在一个异步环境中调用setState,那么setState同步的,因为它会立即执行并更新状态。\[2\]需要注意的是,setState异步并不是指内部由异步代码实现,而是指合成事件和钩子函数的调用在更新之前,导致在合成事件和钩子函数中无法立即获取到更新后的值,形成了所谓的"异步"。\[3\] #### 引用[.reference_title] - *1* *2* [setState同步还是异步问题讲解](https://blog.csdn.net/qq_48637854/article/details/124980239)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [React中的setState同步还是异步](https://blog.csdn.net/m0_69892739/article/details/128424377)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值