React 生命周期与 Hook:从原理到实战全解析

article/2025/8/19 20:22:06

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
持续学习,不断总结,共同进步,为了踏实,做好当下事儿~
非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

在这里插入图片描述

💖The Start💖点点关注,收藏不迷路💖

📒文章目录

    • 1. React 生命周期方法详解
      • 1.1 生命周期的三个阶段(挂载、更新、卸载)
      • 1.2 关键生命周期方法的作用
      • 1.3 不推荐使用的遗留生命周期方法
    • 2. Hook 的引入与核心概念
      • 2.1 为什么需要 Hook?
      • 2.2 常用 Hook 及其作用
        • useState - 状态管理
        • useEffect - 副作用处理
        • 进阶Hook示例:
      • 2.3 Hook 的规则与最佳实践
    • 3. 生命周期与 Hook 的对比与迁移
      • 3.1 类组件生命周期 vs. Hook 实现
      • 3.2 迁移策略
      • 3.3 性能优化对比
    • 4. 总结


React 生命周期与 Hook 是每个 React 开发者必须掌握的核心概念。理解它们的工作原理和适用场景,能帮助开发者编写更高效、可维护的组件代码。本文将深入解析类组件的生命周期方法,对比函数组件中 Hook 的工作机制,并探讨如何合理选择这两种开发模式。


1. React 生命周期方法详解

1.1 生命周期的三个阶段(挂载、更新、卸载)

React 类组件的生命周期可以分为三个主要阶段:

class ExampleComponent extends React.Component {constructor(props) {super(props); // 挂载阶段开始this.state = { count: 0 };}componentDidMount() {console.log('组件已挂载');}shouldComponentUpdate(nextProps, nextState) {return nextState.count !== this.state.count; // 更新阶段控制}componentDidUpdate() {console.log('组件已更新');}componentWillUnmount() {console.log('组件即将卸载'); // 卸载阶段}render() {return <div>{this.state.count}</div>;}
}
  • 挂载阶段:组件实例被创建并插入DOM

    • constructor()render()componentDidMount()
  • 更新阶段:组件因props或state变化而重新渲染

    • shouldComponentUpdate()render()componentDidUpdate()
  • 卸载阶段:组件从DOM中移除

    • componentWillUnmount()

1.2 关键生命周期方法的作用

  1. componentDidMount

    • 最佳实践:在这里进行AJAX请求、DOM操作或订阅事件
    componentDidMount() {fetch('/api/data').then(res => res.json()).then(data => this.setState({ data }));this.timerID = setInterval(() => this.tick(), 1000);
    }
    
  2. shouldComponentUpdate

    • 性能优化关键:通过返回true/false控制是否重新渲染
    shouldComponentUpdate(nextProps, nextState) {// 仅当count变化时才更新return nextState.count !== this.state.count;
    }
    
  3. componentWillUnmount

    • 清理工作:避免内存泄漏
    componentWillUnmount() {clearInterval(this.timerID);this.subscription.unsubscribe();
    }
    

1.3 不推荐使用的遗留生命周期方法

React 16.3+ 标记为不安全的生命周期方法:

  • componentWillMount → 使用constructorcomponentDidMount替代
  • componentWillReceiveProps → 使用static getDerivedStateFromProps
  • componentWillUpdate → 使用getSnapshotBeforeUpdate

替代方案示例:

static getDerivedStateFromProps(props, state) {if (props.value !== state.prevValue) {return {prevValue: props.value,// 其他派生状态...};}return null;
}

2. Hook 的引入与核心概念

2.1 为什么需要 Hook?

类组件存在三大痛点:

  1. 状态逻辑难以复用:HOC和render props导致"嵌套地狱"
  2. 复杂组件难以理解:相关逻辑分散在不同生命周期
  3. 类语法困惑this绑定问题和class的复杂性

函数组件的局限性:

  • 无法使用state
  • 不能执行副作用
  • 缺乏生命周期控制

2.2 常用 Hook 及其作用

useState - 状态管理
function Counter() {const [count, setCount] = useState(0);return (<div><p>You clicked {count} times</p><button onClick={() => setCount(count + 1)}>Click me</button></div>);
}
useEffect - 副作用处理
useEffect(() => {// 相当于 componentDidMount + componentDidUpdatedocument.title = `You clicked ${count} times`;return () => {// 相当于 componentWillUnmountconsole.log('cleanup');};
}, [count]); // 仅在count变化时执行
进阶Hook示例:
const theme = useContext(ThemeContext); // 上下文访问const [state, dispatch] = useReducer(reducer, initialState); // 复杂状态管理const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]); // 性能优化

2.3 Hook 的规则与最佳实践

  1. 调用规则

    • 只在React函数的最顶层调用Hook
    • 不要在循环、条件或嵌套函数中调用
  2. 自定义Hook

function useWindowWidth() {const [width, setWidth] = useState(window.innerWidth);useEffect(() => {const handleResize = () => setWidth(window.innerWidth);window.addEventListener('resize', handleResize);return () => window.removeEventListener('resize', handleResize);}, []);return width;
}
// 使用:const width = useWindowWidth();
  1. 性能优化
    • 使用useCallback缓存函数
    • 使用useMemo缓存计算结果

3. 生命周期与 Hook 的对比与迁移

3.1 类组件生命周期 vs. Hook 实现

生命周期方法Hook 等效实现
constructoruseState 初始化
componentDidMountuseEffect(() => {}, [])
componentDidUpdateuseEffect(() => {}, [deps])
componentWillUnmountuseEffect 的清理函数
shouldComponentUpdateReact.memo + useMemo

3.2 迁移策略

逐步替换示例

  1. 将class改为function
  2. 用useState替换this.state
  3. 用useEffect替换生命周期方法
  4. 用useContext替换contextType

逻辑复用对比

// HOC方式
const EnhancedComponent = withHOC(BaseComponent);// Hook方式
function useCustomLogic() {const [value, setValue] = useState(null);// ...逻辑return value;
}
function Component() {const value = useCustomLogic();// ...
}

3.3 性能优化对比

类组件优化

class OptimizedComponent extends React.PureComponent {// 自动浅比较props和state
}

函数组件优化

const MemoizedComponent = React.memo(function MyComponent(props) {/* 使用props渲染 */},(prevProps, nextProps) => {/* 自定义比较逻辑 */}
);function Parent() {const memoizedCallback = useCallback(() => {doSomething(a, b);}, [a, b]);const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);
}

4. 总结

  1. 核心对比

    • 类组件:命令式的生命周期控制
    • Hook:声明式的副作用管理
  2. 适用场景

    • 维护旧项目:继续使用类组件
    • 新项目开发:优先使用函数组件+Hook
  3. 学习建议

    • 理解两者原理,而非死记API
    • 从简单组件开始实践Hook
    • 逐步重构复杂类组件
  4. 未来趋势

    • React官方推荐Hook作为主要开发方式
    • 新特性(如并发模式)将优先支持Hook
    • 社区生态逐渐转向Hook优先

通过深入理解生命周期和Hook的关系,开发者可以更灵活地选择适合场景的开发模式,编写更清晰、更易维护的React代码。


🔥🔥🔥道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

💖The Start💖点点关注,收藏不迷路💖

💖The Start💖点点关注,收藏不迷路💖


http://www.hkcw.cn/article/lJJylTbaTt.shtml

相关文章

中国驻美使馆回应撤销留学生签证 坚决反对美方做法

中国驻美使馆回应撤销留学生签证。中国驻美国大使馆发言人5月29日回应美国务院关于撤销中国在美留学生签证的声明,表示中方坚决反对这一政治性、歧视性的做法。美方此举将严重损害中国在美留学人员的正当合法权益,并进一步损害美国自身的国际形象和国家信誉。中国驻美使馆已向…

C# 事件的选择与使用

在C#中选择使用EventHandler还是自定义事件委托&#xff0c;取决于具体需求。以下是详细对比 一、决策指南 在 C# 中&#xff0c;EventHandler 是一个泛型委托&#xff0c;用于简化事件的定义和处理。它允许你创建带有自定义事件参数的事件&#xff0c;而不需要每次都定义新的…

蜜雪冰城回应3杯瘦4斤减肥法:没有任何功效只是比较好喝

蜜雪冰城回应3杯瘦4斤减肥法。近日,“蜜雪冰城减肥法”在社交平台流传,不少网友发帖称,一天依次饮用该品牌葡萄冰美式、茉莉奶茶、柠檬水,可实现“三杯瘦四斤。对此,医生提醒:此种减肥方式易引起脱发、低血糖等问题,减重过程中过程中不应该只关注体重,而应该采取科学的方…

深圳街头惊现科技石墩:能充电、会发光还能播视频!

深圳街头惊现科技石墩。“石墩子都能无线充电了?”“科技感满满!”“深圳果然先进!”……近日,一则深圳街头石墩具备无线充电功能的短视频在网络上引发网友惊叹。视频中,龙华区大浪街道后浪新天地路边,一排亮着灯的石墩旁,大人小孩尝试用石墩为手机无线充电,还有人驻足…

三格电子SG-UHF80系列超高频读写器——3米精准识别,开启工业级远距射频新纪元!

核心突破&#xff1a;远距读写&#xff0c;性能跃升 超长距识别&#xff1a;最远3米读取/1.5米写入距离&#xff0c;覆盖大型物流分拣、仓储管理场景。 毫秒级响应&#xff1a;单次读写周期≤800ms&#xff0c;满足高速流水线实时追踪需求。 功率精准调控&#xff1a;13~27dB…

【速通RAG实战:进阶】16、AI生成思维导图全技术解析

一、AI生成思维导图的底层技术逻辑 (一)知识结构化的核心流程 AI生成思维导图的本质是非结构化文本到结构化知识图谱的转化,其技术流程可拆解为五大核心环节: 1. 语义解析与实体抽取 多模态输入处理:支持文本(Markdown/Word/PDF)、语音(会议录音)、手写笔记(图片O…

男子称相伴12年妻子心脏停搏猝逝 回应是否再娶

山东一男子发布多条视频怀念亡妻,二人相恋十二年,28岁妻子死于心脏停搏,去世前一天(5月21日)还晒了老公送的花。当事人回应网友问是否会再娶:“我可能会娶,也可能不会娶,但我现在最大的职责是照顾好两个妈妈,因为我爱人和我都是独生子女。我从14岁就开始和她恋爱,自己…

清代合院将以618元起拍 引发广泛关注

江苏省扬州市一栋清代合院的网络拍卖活动近日引发广泛关注。该房产将于6月15日以618元的价格起拍。此前,该房产在4月和5月经历了两次流拍。4月2日,经过69次出价后,有竞买人以5401314元的价格拍下,但最终悔拍。5月6日,该房产再次开拍,起拍价为3283300元,最终无人出价流拍…

高架桥车道骤变致车辆失控坠下 致5人伤亡

5月19日,广东东莞环莞快速路虎门段发生一起触目惊心的交通事故:一辆行驶中的车辆因四车道突然缩减为三车道,失控冲出高架路面高坠,造成5人伤亡的惨剧。这起事件迅速引发公众对道路设计安全性的强烈质疑,更暴露了城市快速路管理中亟待填补的漏洞。致命设计:车道骤变成“隐…

北方人果然不擅长水战,跨越千年的地域技能密码

北方人果然不擅长水战!“北方兵不善水战”,跨越千年的地域技能密码。“北方兵遇水战显笨拙”,历史的经验揭示地域技能特点。感慨道,“曹操所言非虚,北方士兵在水上战斗确实有所不足”,这句话勾起了我们对赤壁之战的回忆,深刻体现了地域差异对军事技能的深远影响。其实,…

ADQ108-1通道8bit 6~7G USB2.0 PXIe cPCIe采集

技术参数 7 / 6.4 / 6 GSPS采样率8位分辨率2 GHz模拟带宽内部和外部时钟参考时钟参考输出外部触发输入和输出Multi record >1 MHz PRF时间戳1G缓存数据接口USB 2.0 / cPCIe / PXIe支持C/C和MATLAB应用支持C/C和MATLAB ADQ108数字化仪具有单通道、8通道 位&#xff0c;最高7…

作家获奖后追忆已故女友 余华回应 感人故事触动人心

日前,90后作家刘楚昕创作的小说《泥潭》荣获第二届漓江文学奖虚构类奖。在颁奖现场,作家余华公布了这一消息。刘楚昕的获奖感言因其深情和感人,在朋友圈里广泛传播。2017年,刘楚昕在武汉大学读博期间遇到了初恋女友。那时他正朝着自己的文学梦努力,每次散步时都会告诉女友…

金价复涨!国际金价反弹

美东时间5月29日,国际金价反弹,现货黄金涨0.96%,报3317.8美元/盎司;COMEX黄金期货涨0.61%,报3342.6美元/盎司;COMEX白银期货涨0.84%,报33.44美元/盎司。早间金价再度出现下跌,现货黄金现跌0.02%,报3316.6美元/盎司;COMEX黄金期货现跌0.17%,报3338.3美元/盎司。责任编…

53岁男子性侵智力残障女子致其产子 判有期徒刑4年10个月

2023年的夏末秋初,53岁的高如强在李小梅家中,明知她智力存在严重缺陷仍与她发生性关系。2024年6月,北京某医院产房内,23岁的李小梅诞下一名男婴。经司法鉴定,李小梅之子小齐的生物学父亲为高如强。“根据我国刑法第236条,与无性防卫能力者发生性关系,无论是否‘自愿’,…

中东部大范围降雨来袭!端午假期泡雨里 长江中下游雨势强劲

从5月30日开始,中东部地区迎来新一轮大范围降雨过程。端午假期前两天将是此轮降雨的最强时段,长江中下游地区不仅会出现大到暴雨,多地还将显著降温,部分地区最高气温将降至20℃左右。公众需注意防雨防滑,并及时增添衣物。昨天,南方今年来最强降雨过程进入收尾阶段,强降雨…

数据集分享 | 塑料类型检测

【导读】 如何用AI识别生活中复杂多样的塑料垃圾&#xff1f;如何高效利用图像分类模型提升回收分拣效率&#xff1f;今天带来一个专为塑料回收场景打造的高质量图像数据集——塑料垃圾图像分类数据集>>更多资讯可加入CV技术群获取了解哦~ 一、塑料垃圾图像分类数据集 …

[嵌入式实验]实验三:PWM实现LED呼吸灯

一、实验目的 熟悉开发环境控制LED灯了解PWM原理 二、实验环境 硬件&#xff1a;STM32开发板、CMSIS-DAP调试工具 软件&#xff1a;ARM的IDE&#xff1a;Keil C51 三、实验内容 1.实验原理 PWM简称为脉宽调制&#xff0c;是利用微处理器的数字输出来对模拟电路进行控制的…

广东划龙舟从幼儿园开始培养 “奶龙队”萌翻众人

5月23日,广东汕头一幼儿园举办了一场别开生面的龙舟比赛,视频在网上迅速走红。小朋友们手持龙舟桨奋力划动,展现出一股“奶凶奶凶”的气势,网友纷纷戏称这是“奶龙队”申请出战。据了解,这次活动是由汕头市澄海溪南西社幼儿园组织的。张园长表示,该活动旨在让孩子们体验团…

三甲医院护士转行演短剧引热议

近日一名三甲医院护士转行演短剧引热议。该博主发布多条视频,表示两年前是一名护士,随后转行成为一名短剧演员,并调侃:“之前当护士时天天哭,练出来的哭戏。”该博主曾回复网友:不建议大家转行,现在短剧行业很饱和,我拍了两年作品比较多,所以能接到戏。责任编辑:zx00…

十二种存储器综合对比——《器件手册--存储器》

存储器 名称 特点 用途 EEPROM 可电擦除可编程只读存储器&#xff0c;支持按字节擦除和写入操作&#xff0c;具有非易失性&#xff0c;断电后数据不丢失。 常用于存储少量需要频繁更新的数据&#xff0c;如设备配置参数、用户设置等。 NOR FLASH 支持按字节随机访问&…