react-setState更新机制--源码解析
发布日期:2021-05-20 10:06:59 浏览次数:51 分类:精选文章

本文共 574 字,大约阅读时间需要 1 分钟。

React 中 setState 的更新机制比较复杂,主要涉及两种不同的刷新机制,取决于调用 setState 的地方是否是异步函数或者事件回调。

  • 在非事件回调和 setTimeout 中
  • 当使用 setTimeout 或类似的异步方法调用 setState 时,所有的 setState 调用都会被 React 合并成一个单独的操作,放到一个队列中进行。这样能保证同一个组件的 state 只被更新一次,避免了多次渲染带来的性能问题。同时,以 isBatchingUpdates 为 true 的状态,新调用会被加入到 _dirtyComponents 数组中,等待处理。

    1. 在事件回调中
    2. setState 是在事件回调、自定义函数或者延迟调用 (timer 等) 中被调用时,isBatchingUpdates 会被置为 false。此时,React 会立即更新 state,并使组件重新渲染,可能导致频繁的状态更新,增加性能负担。

      总结:

      • 在非事件回调和 setTimeout 中,setState 更新是异步且批量化的,保持较好的性能。
      • 在事件回调中,默认是同步执行的,导致频繁的渲染,不建议大量使用 setState

      这两种机制确保了 React 应用的流畅性和准确性,正确使用 setState 是优化 React 组件性能的关键。

    上一篇:React 合成事件与 JavaScript 原生事件对比
    下一篇:关于For循环中将let替换成var的原因,我觉得这是最好的回答

    发表评论

    最新留言

    做的很好,不错不错
    [***.243.131.199]2025年04月25日 02时15分14秒

    关于作者

        喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
    -- 愿君每日到此一游!

    推荐文章

    flink sql设置并行度_Flink 参数配置和常见参数调优 2023-01-24
    go 字符串替换_Go 每日一库之 quicktemplate 2023-01-24
    hex editor neo下载_口袋妖怪爆焰黑手机版下载-口袋妖怪爆焰黑手游下载v4.3.0 安卓版... 2023-01-24
    hibernate mysql 关联查询_spring-boot hibernate 双向关联查询的坑 2023-01-24
    hive 建表_sqoop的使用之导入到hive和mysql 2023-01-24
    hp工作站z8装Linux,惠普Z8G4双路最小工作站 2023-01-24
    html上传图片直接保存到数据库中,Editor上传图片路径存入数据库中怎么弄? 2023-01-24
    html游戏玩不了,WinXP网页游戏玩不了怎么办有哪些解决方法 2023-01-24
    html转jsp_JSP详解 2023-01-24
    ICLOUD储存空间要升级吗_有人像我一样需要恢复苹果手机icloud空间ios备份时 微信卡住不动了吗(已解决)... 2023-01-24
    image unity 原始尺寸_Unity基础教程-对象管理(十一)——生命周期(Growth and Death)... 2023-01-24
    iphone打字怎么换行_手持iPhone?你可能并不知道的小技巧! 2023-01-24
    jaccard相似度_自然语言处理之文本相似度计算 2023-01-24
    java 8 list对象属性判空_java ---- 认识类对象,属性和方法 2023-01-24
    java http delete_java积累---HttpDelete请求方式传递参数 2023-01-24
    java swing数据库,如何在Java swing中查看数据库结果集 2023-01-24
    java xmpp 群聊,使用XMPPFramework openfire创建聊天室 2023-01-24
    java 反义_java中一些常用的英语 2023-01-24
    java 命令行 class_如何从命令行执行java .class 2023-01-24
    java 字符编码过滤器_java web中字符编码的过滤器(Filter - 1) 2023-01-24