实用指南:React组件生命周期节点触发时机(组件加载Mount、组件更新Update、组件卸载Unmount)组件挂载
2025-11-11 16:52 tlnshuju 阅读(0) 评论(0) 收藏 举报文章目录
- React 组件的“生命周期”通俗讲解
- 一、加载阶段(Mount)
- 什么时候发生?
- 类组件的生命周期钩子:
- 函数组件 + Hooks:
- 二、更新阶段(Update)
- 那这些“变化”怎么来的?(用户是怎么触发的)
- 类组件示例
- 函数组件示例
- **用户触发更新的具体例子:**
- 三、卸载阶段(Unmount)
- 类组件:
- 函数组件:
- 那用户是怎么触发卸载的呢?
- 一个完整的流程图
- 生命周期与用户行为总结图
- 举个实际的小例子
- 总结表
- 写在最后
React 组件的“生命周期”通俗讲解
想象一下,一个 React 组件就像你养的一只小宠物:
它出生(加载) → 成长(更新) → 离开(卸载)。
React 会在这三个阶段自动帮你做一些事,而你也可以在不同阶段去“插手”处理逻辑。
一、加载阶段(Mount)
加载,也叫“挂载”。
就是组件第一次被放进页面里、第一次显示在屏幕上的时候。
什么时候发生?
- 你在父组件里写了
<Child /> - React 需要把这个组件渲染到真实的 DOM 上
用户操作触发示例:
这些行为都可能导致组件第一次挂载:
- 切换路由页面(如从
/home跳到/about,React Router 会加载新页面组件)- 点击按钮 显示某个子组件(例如点击“展开详情”按钮后才渲染
<Detail />)- 条件渲染出现(
{show && <Modal />}从false变成true)换句话说:只要某个组件第一次出现在页面上,就会经历挂载阶段。
类组件的生命周期钩子:
class Example extends React.Component {
componentDidMount() {
console.log("组件挂载完成!");
}
render() {
return <div>你好,我刚出生 </div>;}}
componentDidMount 会在组件挂载后执行。
常用于:
- 请求接口数据(fetch)
- 操作 DOM
- 启动计时器等副作用
函数组件 + Hooks:
import { useEffect } from "react";
function Example() {
useEffect(() => {
console.log("组件挂载完成!");
}, []); // 依赖数组为空 → 只在第一次执行
return <div>你好,我刚出生 </div>;}
二、更新阶段(Update)
更新,就是组件因为数据变化而重新渲染。
可能的触发原因包括:
- 组件自己的 state 改变
- 父组件传来的 props 改变
- 上层重新渲染导致子组件也被迫更新
那这些“变化”怎么来的?(用户是怎么触发的)
React 组件的更新几乎都来自用户操作或外部数据变化,比如:
- 用户在输入框里输入内容,触发
setState更新- 点击按钮修改状态,例如
setCount(count + 1)- 父组件更新了 props(比如父组件的 state 变化)
- 后端请求返回新数据后更新状态
- 定时器定期改变数据(如计时器)
每次组件的
state或接收到的props改变,React 就会执行“更新阶段”的逻辑。
类组件示例
class Example extends React.Component {
componentDidUpdate(prevProps, prevState) {
console.log("组件更新了!");
}
render() {
return <div>{this.props.count}</div>;}}
函数组件示例
function Example({ count }) {
useEffect(() => {
console.log("组件更新了!");
}, [count]); // 当 count 变化时执行
return <div>{count}</div>;}
小技巧:
- 如果你不加依赖项,
useEffect每次渲染都会执行。- 如果依赖项是空数组,只在挂载时执行一次。
- 如果依赖项包含变量,只在那个变量变化时执行。
用户触发更新的具体例子:
function Counter() {
const [count, setCount] = useState(0);
return (
<><p>点击次数:{count}</p><button onClick={() => setCount(count + 1)}>点我</button></>);}
每当你点击按钮时,
setCount改变了 state,
React 就会重新渲染组件,执行更新阶段。
三、卸载阶段(Unmount)
卸载,就是组件“离开”页面的时刻。
React 会把它从 DOM 中移除。
类组件:
class Example extends React.Component {
componentWillUnmount() {
console.log("组件被卸载了 ");
}
render() {
return <div>再见!</div>;}}
函数组件:
import { useEffect } from "react";
function Example() {
useEffect(() => {
console.log("组件挂载");
return () => {
console.log("组件卸载 ");
};
}, []);
return <div>再见!</div>;}
注意这里的
return () => {}就是 清理函数,
React 会在组件卸载时调用它,非常适合:
- 清除定时器
- 取消网络请求
- 移除事件监听器
那用户是怎么触发卸载的呢?
当一个组件不再被渲染时,就会触发卸载。
这通常由以下操作引起:
- 切换页面或路由(比如从
/home跳到/profile)- 条件渲染变为 false(
{show && <Modal />}从 true → false)- 组件被父组件移除(父组件结构或 state 改变导致不再渲染它)
- React 丢弃旧的组件实例(如 key 改变时)
举个例子:
// page.tsx
"use client";
import React, { useEffect, useState } from "react";
function App() {
const [show, setShow] = useState(true);
return (
<><button onClick={() => setShow(!show)}>{show ? "卸载组件" : "重新加载组件"}</button>{show && <Child />}</>);}function Child() {useEffect(() => {console.log("Child 挂载");return () => console.log("Child 卸载");}, []);return <p> 我是子组件</p>;}export default App;
点击按钮时,
show从true→false,React 会移除<Child />,
执行清理函数,也就是“卸载阶段”。


一个完整的流程图
挂载(Mount) → 更新(Update) → 卸载(Unmount)↑ ↑ ↑useEffect([]) useEffect([deps]) return cleanup()componentDidMount componentDidUpdate componentWillUnmount
生命周期与用户行为总结图
用户操作或数据变化↓┌───────────────┐│ 挂载(Mount) │ ← 第一次显示(点击打开、切换路由等)└──────┬────────┘↓│ 更新(Update) │ ← 用户输入、点击、接口返回数据等↓┌──────┴────────┐│ 卸载(Unmount)│ ← 页面切换、隐藏组件、销毁实例等└────────────────┘
举个实际的小例子
我们来写一个计时器组件,看看三个阶段是怎么触发的:
import { useEffect, useState } from "react";
function Timer() {
const [count, setCount] = useState(0);
useEffect(() => {
console.log("⏱ 组件挂载");
const timer = setInterval(() => setCount(c => c + 1), 1000);
return () => {
console.log(" 清除定时器,组件卸载");
clearInterval(timer);
};
}, []);
useEffect(() => {
console.log(" count 更新为:", count);
}, [count]);
return <h1>时间:{count}</h1>;}export default Timer;
- 第一次显示时,会打印“组件挂载”
- 每秒
count更新一次,会打印“count 更新为…” - 当组件被移除时(比如跳转页面),会打印“清除定时器,组件卸载”

总结表
| 阶段 | 类组件方法 | 函数组件写法 | 常见用途 | 常见触发操作 |
|---|---|---|---|---|
| 挂载 | componentDidMount | useEffect(() => {}, []) | 初始化、数据请求 | 页面加载、点击显示、条件渲染变为 true |
| 更新 | componentDidUpdate | useEffect(() => {}, [deps]) | 响应数据变化 | 用户输入、点击按钮、父组件更新 |
| 卸载 | componentWillUnmount | useEffect(() => { return cleanup }, []) | 清理副作用 | 路由切换、隐藏组件、条件渲染变为 false |
写在最后
理解 React 的三个阶段只是第一步,
更重要的是要明白——是谁触发了这些阶段的变化?
挂载:组件第一次出现(比如你点击“展开详情”)
更新:组件里的数据或父组件数据变了
卸载:组件被移除或页面跳转
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/962542.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!