Lazy loaded image
前端
React-组件的生命周期
字数 1234阅读时长 4 分钟
2026-1-19
2026-1-19
type
status
date
slug
summary
tags
category
icon
password
📢 大家好,我是小陈同学,这一篇是关于 React 的学习笔记,关于组件的生命周期
📢 非常感谢你的阅读,不对的地方欢迎指正 🙏
📢 愿你生活明朗,万物可爱

引言

在 React 中为我们提供了一些生命周期钩子函数,让我们能在 React 执行的重要阶段,在钩子函数中做一些事情。那么在 React 的生命周期中,有哪些钩子函数呢,我们来总结一下

React 生命周期

🌟 三阶段执行流程(按顺序触发)

React 生命周期主要包括三个阶段:初始化阶段,更新阶段,销毁阶段
image-20210821102622645

🔥 三阶段快速记忆法(30秒掌握)

阶段
核心钩子(顺序)
记忆口诀
作用场景
初始化
CGRM
“构造器,props来,渲染,挂载完”
组件首次挂载(只执行1次)
更新
GSRSD
“props来,检查更新,渲染,快照,更新完”
state/props 变化时触发
销毁
U
“卸载前清理”
组件从 DOM 移除前触发
✨ 口诀详解:
  • C = constructor(构造函数)
  • G = getDerivedStateFromProps(根据 props 更新 state
  • R = render(渲染 JSX)
  • M = componentDidMount(挂载完成)
  • S = shouldComponentUpdate(更新前检查)
  • D = componentDidUpdate(更新完成)
  • U = componentWillUnmount(卸载前清理)

📌 详细阶段说明

1️⃣ 初始化阶段(组件首次挂载)

钩子函数
触发时机
作用
constructor(props)
组件初始化时(仅执行1次
初始化 state / 绑定方法(推荐用类属性初始化 state
static getDerivedStateFromProps(props, state)
render 之前(初始化和更新都会触发
根据 props 生成新的 state(返回对象或 null
render()
getDerivedStateFromProps 之后
返回 JSX(不操作 DOM,仅生成虚拟 DOM)
componentDidMount()
组件挂载到 DOM 后(首次渲染后
执行副作用(如 API 请求、订阅事件)
💡 关键点:
  • getDerivedStateFromProps 必须返回对象(如 return { count: props.initialCount }
  • 若不需要根据 props 更新 state,返回 null
  • 避免在 render 中调用 setState(会导致死循环)

2️⃣ 更新阶段(state/props 变化时)

钩子函数
触发时机
作用
getDerivedStateFromProps(props, state)
render 之前(每次更新都会触发
根据新 props 生成新 state核心优化点
shouldComponentUpdate(nextProps, nextState)
render 之前(更新前检查
返回 false 可阻止更新(性能优化关键!)
render()
shouldComponentUpdate 返回 true
重新渲染 JSX
getSnapshotBeforeUpdate(prevProps, prevState)
render 之后、DOM 更新前
获取更新前的 DOM 状态(如滚动位置)
componentDidUpdate(prevProps, prevState, snapshot)
DOM 更新后(非首次渲染
执行更新后的副作用(如更新 DOM、发送新请求)
💡 关键点:
  • shouldComponentUpdate是性能优化的核心!例如:
    • getSnapshotBeforeUpdate 必须与 componentDidUpdate 配合使用

    3️⃣ 销毁阶段(组件从 DOM 移除)

    钩子函数
    触发时机
    作用
    componentWillUnmount()
    组件即将卸载前(最后一次执行
    清理副作用(如清除定时器、取消订阅)
    💡 关键点:
    • 必须在 componentWillUnmount 中清理(避免内存泄漏)
    • 例如:clearInterval(this.timer)

    💻 优化示例代码(可直接运行)

    上一篇
    React - Diff 算法深度解
    下一篇
    React-面向组件编程