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()请参考官方文档

相关推荐
等一场春雨19 分钟前
springboot 3 websocket react 系统提示,选手实时数据更新监控
spring boot·websocket·react.js
风无雨23 分钟前
react杂乱笔记(一)
前端·笔记·react.js
北海天空1 小时前
reactHooks到底钩到了什么?
前端·react.js
m0_748238781 小时前
3D架构图软件 iCraft Editor 正式发布 @icraftplayer-react 前端组件, 轻松嵌入3D架构图到您的项目,实现数字孪生
前端·react.js·前端框架
阿卡基YUAN2 小时前
react useCallback
前端·javascript·react.js
米奇妙妙wuu7 小时前
react使用sse流实现chat大模型问答,补充css样式
前端·css·react.js
傻小胖7 小时前
React 生命周期完整指南
前端·react.js
爱喝奶茶的企鹅8 小时前
Next.js 14 性能优化:从首屏加载到运行时优化的最佳实践
react.js
政采云技术10 小时前
React前端权限管理思路
前端·react.js
傻小胖10 小时前
React 脚手架使用指南
前端·react.js·前端框架