例如下面的代码,两次打印出的结果是相同的:

componentDidMount() {

this.setState({ index: this.state.index + 1 }, () => {

console.log(this.state.index);

})

this.setState({ index: this.state.index + 1 }, () => {

console.log(this.state.index);

})

}

原因就是 React会批处理机制中存储的多个 setState进行合并,来看下 React源码中的 _assign函数,类似于 Object的 assign:

_assign(nextState,typeof partial ==='function'?partial.call(inst,nextState,props,context):partial);

如果传入的是对象,很明显会被合并成一次,所以上面的代码两次打印的结果是相同的:

Object.assign(

nextState,

{index: state.index+ 1},

{index: state.index+ 1}

)

注意, assign函数中对函数做了特殊处理,处理第一个参数传入的是函数,函数的参数 preState是前一次合并后的结果,所以计算结果是准确的:

componentDidMount() {

this.setState((state, props) => ({

index: state.index + 1

}), () => {

console.log(this.state.index);

})

this.setState((state, props) => ({

index: state.index + 1

}), () => {

console.log(this.state.index);

})

}

所以上面的代码两次打印的结果是不同的。

最佳实践

React会对多次连续的 setState进行合并,如果你想立即使用上次 setState后的结果进行下一次 setState,可以让 setState 接收一个函数而不是一个对象。这个函数用上一个 state 作为第一个参数,将此次更新被应用时的 props 做为第二个参数。

jlabel 不能连续两次set_为什么有时连续多次setState只有一次生效?相关推荐

  1. MySQL计算指标连续两月金额相比_20160929

    在正常的业务逻辑中,对客户的分析是必须的也是最经常用到的,根据时间维度计算计算指标连续两月环比情况也是一道必须面对的题目. 国庆放假 先写代码 后面再拆分解释 SELECT a.*,b.年月 AS 上 ...

  2. 某阿里8年资深程序员求助:连续两次绩效挂掉,被hr辞退不给n+1,怎么办?

    背低绩效.被辞退.不给赔偿.劳动仲裁--这些都是打工人们常常会碰到的恶心事,没经验的小白一旦遇上会就会不知所措.但即使是工作多年的大佬也未必具备相关知识,这不,一个在阿里工作了8年的程序员就遇到了类似 ...

  3. 阿里程序员连续两次绩效3.25!大老板威胁要开除他!还不给赔偿金!问大家该如何维权?...

    请点击上面 一键关注! 职场中人总会遇到各种想象不到的侵权行为,一个阿里巴巴的员工发帖哭诉自己连续两次绩效3.25,大老板说要开除他,还没有N+1,问大家该怎么维权? 面对如此明目张胆地欺负,网友们怒 ...

  4. 2021 AAAI Fellow名单重磅出炉,华人学者遗憾连续两年无缘入选 | AI日报

    2021 AAAI Fellow名单重磅出炉,华人学者遗憾连续两年无缘入选 据AAAI 官方推特消息,AAAI将新增10位Fellow,表彰他们在强化学习.自然语言处理.视觉等方面的所作出的贡献. A ...

  5. 第四范式连续两年入选CB Insights全球AI百强榜

    近日,全球知名创投研究机构CB Insights发布了2020全球AI百强创业公司榜单"AI 100",遴选出了2020 年全球 100 家最有前景的人工智能公司.凭借AI产业化落 ...

  6. php 连续点击事件,javascript设置连续两次点击按钮时间间隔的方法_javascript技巧...

    本文实例讲述了javascript设置连续两次点击按钮时间间隔的方法,分享给大家供大家参考.具体实现方法如下: 很多时候我们在实际应用中,可能并不希望按钮联系被不间断的点击,所以要限定一定的时间间隔才 ...

  7. IBM连续两年大数据市场占有率全球第一

    ZDNet至顶网服务器频道 04月22日 新闻消息:IBM 近日宣布,根据市场调研机构Wikibon最新研究报告<大数据供应商收益与市场预测>,IBM连续两年实现大数据市场占有率第一,领跑 ...

  8. 连续两年入选Gartner公共云容器,阿里云在边缘容器方面做了什么?

    最近,Gartner发布了2020年公共云容器报告,阿里云连续两年成为唯一入选的中国企业.报告显示,阿里云容器服务在中国市场表现强劲,产品形态丰富,在 Serverless 容器.服务网格.安全沙箱容 ...

  9. Wi-Fi 6连续两年出货量国内登顶,锐捷无线靠什么这么6?

    近日,国际数据咨询公司IDC发布<2020年第四季度中国企业级WLAN市场跟踪报告>.数据显示,锐捷网络Wi-Fi 6产品全年出货量超过70万,位列Wi-Fi 6品类出货量第一,市场占比3 ...

最新文章

  1. 使用R构建Xgboost模型并绘制ROC曲线
  2. 中国数学界,无论怎样感谢哈代都不为过
  3. 过滤输入内容中是否含有特殊字符与表情
  4. pytorch 单机多卡训练distributedDataParallel
  5. 数学:莫比乌斯反演-约数个数和
  6. git词汇表:gitglossary(7) Manual Page
  7. mysql 5.5 udf_MYSQL5漏洞之udf提权
  8. LINUX登录界面,输入密码,循环重启出现
  9. 卡卡通小熊win7桌面主题+非主流win7主题下载
  10. 2019春 总结作业
  11. 计算机毕业设计Java消防安全应急培训管理平台(源码+系统+mysql数据库+Lw文档)
  12. 网页title如何优化
  13. 校招生入职半年多后担任社招面试官的体验
  14. 我们编写的python代码在运行过程中_在 Rust 代码中编写 Python 是种怎样的体验?...
  15. 使用反射时出现java.lang.NoSuchMethodException
  16. 核心频率个加速频率_【硬件资讯】AMD:锐龙3系列加速频率再提2%
  17. 成长性思维和富人思维
  18. Mac 删除分区与合并分区
  19. 计算机主机配置一般有机箱主板cpu,1500元电脑主机配置有哪些 1500电脑主机配置推荐【图文】...
  20. JWT如何解析过期的token中的信息

热门文章

  1. python内存池机制_看过来啦!教你用Python进行内存管理
  2. 烽火服务器怎么进入bios系统,装机高手告诉你如何进入bios
  3. html四边形的的框怎么编写,html知识点之利用css四边形切角并且加上边框
  4. 泸西一中2021高考成绩查询,云南红河州四所好高中,红河州一中一本率领先,建水一中不容小觑...
  5. mysql 禁止使用enum_MySQL慎用 ENUM 字段
  6. python提取txt数据到excel_python 读取txt中每行数据,并且保存到excel中的实例
  7. 安卓逆向_3 --- 篡改apk名称和图标、修改包名实现应用分身、修改资源去广告、去除re管理器广告
  8. Spring Data JPA事务管理
  9. 计算机组成原理算术运算实验报告,计算机组成原理算术逻辑运算实验报告
  10. 有必要考国二mysql_计算机二级必须要考吗