当前位置: 首页 > news >正文

调用setState 之后发生了什么?

触发状态更新

当你在组件里调用:
this.setState({ count: this.state.count + 1 });

React 并不会马上修改 this.state,而是 把更新请求放到一个队列中(即所谓的异步/批量更新机制)。

合并新旧状态

  • React 会将你传入的对象 { count: newValue } 和现有的 state 合并(shallow merge,浅合并)。

  • 如果传入的是函数 setState((prevState, props) => {...}),React 会先执行这个函数,得到新的部分 state,再合并。

标记组件需要更新

  • React 在内部给该组件打上一个 “需要重新渲染” 的标记。

  • 但此时不会立即更新 UI,而是交给 调度器(Scheduler) 统一管理,可能会延迟批处理(提高性能)。

调用 Reconciliation(协调算法)

  • React 会触发 虚拟 DOM 的 diff 过程,比较更新前后的 Virtual DOM 树。

  • 找出需要真正修改的部分(例如某个 <span> 的文字变了,而不是整个组件都重建)。

渲染更新(Commit 阶段)

  • React 把差异(DOM diff 结果)应用到真实 DOM 上。

  • 更新 UI,同时调用相关生命周期方法 / hooks:

  1. 类组件:componentDidUpdate

  2. 函数组件:useEffect(在 commit 后执行)

触发副作用

  • 例如 useEffect 的回调函数执行。

  • 如果有 setState 在这些副作用里,会再次触发更新,进入新的更新循环。

流程总结

调用 setState()↓
将更新加入队列(可能批处理)↓
合并 state↓
标记组件需要更新↓
虚拟 DOM diff↓
最小化更新真实 DOM↓
调用生命周期 / hooks

小知识点

  • setState 是 异步的(React 会合并多次调用以优化性能)。

  • 如果你需要拿到更新后的 state,可以用:

this.setState((prev) => ({ count: prev.count + 1 }), () => {console.log(this.state.count); // 回调里能拿到最新值
});
  • React 18 以后,在事件回调里,setState 默认是批量的。
http://www.gsyq.cn/news/13970.html

相关文章:

  • 树形dp [POI 2013] LUK-Triumphal arch
  • 万象EXCEL开发(三)格式解读calcChain.xml——东方仙盟练气期 - 指南
  • 使用 ShedLock 实现多实例定时任务单执行的常见错误及解决办法
  • PiXYZ Studio 2021下载地址与安装教程
  • 深入解析:在 C# .NETCore 中使用 MongoDB(第 2 部分):使用过滤子句检索文档
  • 深入解析:4、urbane-commerce 认证请求 DTO 设计规范
  • 选对强大的技术底座:一篇文章讲透虚拟机与容器核心差异
  • 深入解析:招聘:解决方案架构师 - 中国北京(混合办公)
  • 自然灾害vr学习机:山体滑坡+泥石流避险+洪涝逃生+地震逃生+台风避险+雷电避险 - 详解
  • 【面板材料】A股上市公司增发股票及配股相关资料(1991-2024年)
  • BindingList的应用与改进
  • 谷歌 SEO 新词 xx animate 等实操教程
  • 完整教程:【读书笔记】架构整洁之道 P6 实现细节
  • init.tcl
  • ffmpeg一些使用记录,防止忘记
  • 生产者-消费者问题
  • QAction的使用
  • flow.tcl
  • sg.测试 PySimpleGUI 取值方法
  • 剥开参数看本质:2025 年手机性能与处理器深度解析 - 详解
  • HT-SBTC-2-10L 是成都恒利泰推出的 5–1000 MHz
  • Gitee DevOps:本土化基因驱动中国企业研发效能革命
  • 每周读书与学习-初识JMeter 元件(三)
  • 划分子网与连通性
  • Gitee:中国开发者生态的崛起与数字化转型新动能
  • 详细介绍:HDFS和MapReduce——Hadoop的两大核心技
  • 完整教程:大模型agent综述:A Survey on Large Language Model based Autonomous Agents
  • 三脚电感在报警器芯片里的实际作用与用法
  • jenkins maven nacos springboot profile实现多环境配置
  • 互斥锁和信号量机制