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

react 的生命周期函数中,当props改变时,会引发的后续 变化,rander()函数什么时候执行?

一、当 props 改变时,组件会触发哪些生命周期?

以 class 组件 为例(函数组件用 Hooks 行为类似):

1. 父组件重新渲染 → 传给子组件的新 props 变化

父组件更新 → 子组件收到新的 props。

2. 子组件生命周期触发顺序(props 改变时)

如果使用的是 React 16.3+ 的新生命周期:

static getDerivedStateFromProps(nextProps, prevState)
  • 当 props 改变时首先执行

  • 是一个“纯函数”,不能访问 this

  • 可根据 nextProps 更新 state(不常用)

shouldComponentUpdate(nextProps, nextState)
  • 决定是否需要重新渲染

  • 返回 false → 阻止后续 render

  • PureComponent 在内部自动实现浅比较

render()
  • props 或 state 变化都会执行

  • 你必须明确:render 不等于真实 DOM 更新

getSnapshotBeforeUpdate(prevProps, prevState)
  • 用来在 DOM 更新前读取信息(例如滚动条位置)
componentDidUpdate(prevProps, prevState, snapshot)
  • DOM 已经更新

  • 可进行网络请求、操作 DOM、更新状态需慎重(避免死循环)

二、props 改变时 render() 会不会执行?

会执行!

只要以下任意条件成立,render() 一定执行:
  • props 发生变化

  • state 发生变化

  • 父组件重新 render(即使 props 没变)

只有一种情况 render 不执行:

shouldComponentUpdate 返回 false:

shouldComponentUpdate() {return false
}

或使用 PureComponent 但 props/state 没变化(浅比较)。

三、为什么 props 改变会执行 render?

因为 React 的核心思想是:

UI = f(state, props)

只要 props 或 state 改变,UI 就可能发生变化 → 需要调用 render() 生成新的 Virtual DOM

然后 React 会:

  • 对新旧 Virtual DOM 做 diff

  • 只更新变化的 DOM 节点(避免整体刷新)

这就是效率高的原因。

最简总结

props 改变 → 子组件严格的生命周期:
getDerivedStateFromProps
↓
shouldComponentUpdate
↓
render
↓
getSnapshotBeforeUpdate
↓
componentDidUpdate

props 改变时一定会执行 render(除非你拦截)

http://www.jsqmd.com/news/49342/

相关文章:

  • 银河麒麟服务器版exFat格式U盘
  • 17 年深耕互联网服务!广州天呈网络技术以营销网站建设、品牌网站建设、网站建设推广赋能企业增长
  • 全 IB 认证加持,十五年一贯制深耕!嘉兴国际学校标杆 —— 青鸟同文实验学校实力解读
  • 2025 年 11 月镀膜材料厂家权威推荐榜:真空镀膜材料,光学镀膜材料,装饰镀膜材料,高性能镀膜材料源头企业精选
  • 想做一款健康app
  • 2025年智能电缆订制厂家权威推荐榜单:防火电缆/控制电缆/低烟无卤电缆源头厂家精选
  • 2025 年 11 月酿酒设备厂家权威推荐榜:蒸馏设备/白酒包装设备/蒸煮设备/发酵罐/储酒罐/封箱机,高效智能酿造系统全解析
  • 2025 年 11 月码垛机厂家权威推荐榜:龙门/立柱/全自动/机器人码垛设备,高效智能与稳定耐用工业之选
  • java生成word-xdocreport
  • SynchronizedList线程安全列表
  • CLaunch设置自动开机启动的方法
  • 2025 年 11 月灌装机厂家权威推荐榜:酱油灌装机/高精度灌装机,洗瓶机/多种异型瓶洗瓶机/酱油洗瓶机,封盖机/酱油封盖机,高效稳定与智能操控的行业优选方案
  • 电池安全与召回危机
  • 求评
  • 10道面试常考的C++面试题 - Sad
  • Oracle 11g 安装程序闪退无法运行问题解决
  • 2025年上海一对一辅导机构推荐:徐汇区、虹口区家教辅导机构深度测评榜单
  • 2025年上海一对一辅导机构推荐:杨浦区、闵行区家教辅导机构深度测评榜单
  • 深入解析:从BIOS到UEFI:电脑启动进化史
  • 深耕四川 服务全国钢栈桥厂家推荐!四川中和志城建筑工程以施工 / 临时 / 装配式等全品类钢栈桥技术,筑牢工程生命线
  • 周总结汇览
  • 质量管理系统(QMS),如何选供应商?
  • 2025 年 11 月二氧化硫检测仪厂家推荐排行榜,便携式二氧化硫检测仪,固定式二氧化硫检测仪,在线二氧化硫检测仪,高精度二氧化硫检测仪公司精选
  • 2025年整流桥GBL生产厂家权威推荐榜单:整流桥GBU/整流桥GBP/整流桥KBJ源头厂家精选
  • Java 中的结构化并发模式
  • ddddocr: 得到滑块的目标位置
  • 小满的五年心得体会(程序人生) - 教程
  • ChatGPT响应背后的47步技术之旅
  • 2025 最新山东青岛进口公司排行榜,全链路进口清关优质企业最新推荐 涵盖多品类专业服务权威榜单机械进口代理/海关进口代理/进口通关/进口报关行/代理进口公司推荐
  • 我在赛时写下了如下代码,你也来试试吧