react:生命周期

一、生命周期阶段

官方文档:https://zh-hans.legacy.reactjs.org/docs/react-component.html

React组件生命周期可分为三个阶段:挂载、更新、卸载

  • 挂载:当组件实例被创建并插入 DOM 中时。其生命周期调用顺序如下:

    • constructor()
    • static getDerivedStateFromProps()
    • render()
    • componentDidMount()
  • 更新:当组件的 props 或 state 发生变化时会触发更新。组件更新的生命周期调用顺序如下:

    • static getDerivedStateFromProps()
    • shouldComponentUpdate()
    • render()
    • getSnapshotBeforeUpdate()
    • componentDidUpdate()
  • 卸载:当组件从 DOM 中移除时

    • componentWillUnmount()

组件生命周期图谱:https://projects.wojtekmaj.pl/react-lifecycle-methods-diagram/

  • 常用生命周期图谱:
  • 完整生命周期图谱:

二、常用生命周期方法

方法 触发时机 作用 说明
constructor() 组件挂载之前,会调用它的构造函数 1、初始化state 2、为事件处理程序绑定实例 如果不初始化 state 或不进行方法绑定,则不需要为 React 组件实现构造函数
render() 每次组件渲染都会触发 渲染UI 1、render() 方法是 class 组件中唯一必须实现的方法 2、render()方法必须有返回值
componentDidMount() 组件挂载后(插入 DOM 树中)立即调用 1、发送网络请求 2、DOM操作 这个方法是比较适合添加订阅的地方
componentDidUpdate() 更新后会被立即调用 1、发送网络请求 2、DOM操作 1、如果这里要调用 setState(),必须放在一个如 if 的条件语句中,否则会导致死循环 2、语法:componentDidUpdate(prevProps, prevState, snapshot)
componentWillUnmount() 组件卸载及销毁之前直接调用 执行清理工作(如:移除监听、清理定时器、取消订阅等)

三、不常用生命周期方法

方法 触发时机 作用 说明
shouldComponentUpdate() 当 props 或 state 发生变化时,在 render() 执行之前被调用 判断 React 组件的输出是否受当前 state 或 props 更改的影响 1、返回布尔值,默认 true 2、语法:shouldComponentUpdate(nextProps, nextState) 3、此方法仅作为性能优化的方式而存在
getDerivedStateFromProps() 在调用 render() 之前调用,并且在初始挂载及后续更新时都会被调用 此方法适用于罕见的用例,即 state 的值在任何时候都取决于 props 1、返回一个对象来更新 state,如果返回 null 则不更新任何内容 2、语法:static getDerivedStateFromProps(props, state) 3、此方法无权访问组件实例
getSnapshotBeforeUpdate() 在最近一次渲染输出(提交到 DOM 节点)之前调用 它使得组件能在发生更改之前从 DOM 中捕获一些信息(例如,滚动位置) 1、返回 snapshot 的值(或 null) 2、语法:getSnapshotBeforeUpdate(prevProps, prevState)

此外,涉及错误边界的两个方法getDerivedStateFromError()componentDidCatch()请参考官方文档

相关推荐
码农学院13 小时前
React公众号开发:母婴用品会员积分体系技术方案
前端·react.js·前端框架
mONESY13 小时前
React TodoList 通俗讲解|彻底搞懂父子组件通信与状态管理
react.js
kisshyshy15 小时前
《端侧大模型(三)“精装修”日记:进度条整容、聊天框首秀》
react.js·typescript·代码规范
lymboy17 小时前
Spring AI的工具调用循环,本质就是ReAct:一次源码级拆解
人工智能·spring·react.js
Darling噜啦啦1 天前
React 组件化实战:从 TodoList 吃透父子通信与状态管理
react.js
bloglin999991 天前
langchain 和 langgraph 和 react
javascript·react.js·langchain
触底反弹1 天前
🚀 删了数据刷新又回来?3 组件 × 4 回调 × 3 坑讲透 React 父子通信
前端·javascript·react.js
sugar__salt1 天前
useState 深入浅出:React 状态管理的基石
前端·react.js·前端框架
moMo2 天前
状态管理第一步:React useState 核心行为完全拆解
react.js
拾年2752 天前
React 组件通信完全指南 —— 从 Todo App 搞懂父子组件那点事
react.js