leiwuhen-67's blog leiwuhen-67's blog
首页
    • 《Vue》笔记
    • 《React》笔记
    • 《NodeJs》笔记
    • 《CSS》笔记
    • 《Redis》笔记
    • 基础入门
    • 《Mock》笔记
    • 《MySQL》笔记
    • 《Git》相关
影音视听
收藏
关于
GitHub (opens new window)

我的公众号

首页
    • 《Vue》笔记
    • 《React》笔记
    • 《NodeJs》笔记
    • 《CSS》笔记
    • 《Redis》笔记
    • 基础入门
    • 《Mock》笔记
    • 《MySQL》笔记
    • 《Git》相关
影音视听
收藏
关于
GitHub (opens new window)
  • React

    • 使用React脚手架快速搭建项目
    • hooks之useEffect
    • React之事件绑定及简写方式
    • React之props传值并对其进行限制
    • React之Refs的基本使用
    • React之生命周期钩子
      • React 17.x之前
        • constructor:在类式组件挂载之前运行。
        • componentWillMount:组件挂载前调用
        • componentDidMount:组件挂载完毕调用
        • shouldComponentUpdate(nextProps, nextState, nextContext):组件是否需要更新
        • componentWillUpdate(nextProps, nextState):组件将要更新时调用
        • componentDidUpdate(prevProps, prevState, snapshot?):组件更新了 props 或 state 重新渲染后立即调用它
        • componentWillReceiveProps(nextProps):子组件将要接收新的props时调用,第一次不会调用
        • componentWillUnmount:组件将要卸载前调用
      • 旧版总结
      • React 17.x之后
        • getDerivedStateFromProps(props, state):返回一个对象来更新 state,或返回 null 不更新任何内容。(使用场景极罕见)
        • getSnapshotBeforeUpdate(prevProps, prevState):在 React 更新 DOM 之前时直接调用它,使你的组件能够在 DOM 发生更改之前捕获一些信息(使用场景极罕见)
      • 新版总结
    • React之key的使用
    • React之代理服务器配置
    • React之封装全局Loading组件
    • React之消息的发布-订阅(pubsub-js)
    • React之Redux的基本使用
    • React之react-redux的基本使用
    • React之redux的数据持久化存储
    • React之路由懒加载
    • React之Render Props的使用
    • React之createBrowserRouter
    • React之路径别名@配置
    • React之craco打包优化配置
    • React之项目国际化
    • React之postcss-pxtorem移动端适配
    • React之使用vite创建项目
    • React之ts类型标注汇总
    • React之使用 ant design搭建后台管理之踩坑
    • React之路由切换动画
    • React之使用vite创建组件库并发布到npm
    • React之项目打包部署到nginx
    • React之自定义组件添加className与style
  • React Native

  • 《React》笔记
  • React
心欲无痕
2024-03-11
目录

React之生命周期钩子

在 React 中,因为涉及到新旧版本,所以生命周期钩子也是有所不同的。

# React 17.x 之前

在 React 17.x 之前,生命周期钩子是这样的

# constructor:在类式组件挂载之前运行。

  • 一般来说,在 React 中 constructor 仅用于两个目的,即声明 state 以及将你的类方法绑定到你的类实例上。

# componentWillMount:组件挂载前调用

  • 在 React 17.x 之前叫 componentWillMount,在 17.x 中使用该钩子,控制台会警告,使用 UNSAFE_componentWillMount 可解决警告问题。在 18.x 中旧名称已被弃用,在 React 未来的主版本中,只有新名称才有效。

# componentDidMount:组件挂载完毕调用

  • 在这个钩子里可以做一些常用的初始化操作,例如,发送网络请求、开启定时器,订阅消息等

# shouldComponentUpdate (nextProps, nextState, nextContext):组件是否需要更新

  • 返回一个布尔值,返回 true 表示组件需要更新,false 表示不需要更新,默认值为 true。
  • 当收到新的 props 或 state 时,React 会在渲染之前调用 shouldComponentUpdate。
  • 初始渲染或使用 forceUpdate 时将不会调用此方法。
  • 接收三个参数,nextProps(组件即将用来渲染的下一个 props),nextState(组件即将渲染的下一个 state),nextContext(组件将要渲染的下一个 context)

# componentWillUpdate (nextProps, nextState):组件将要更新时调用

  • 在 React 17.x 之前叫 componentWillUpdate,在 17.x 中使用该钩子,控制台会警告,使用 UNSAFE_componentWillUpdate 可解决警告问题。在 18.x 中旧名称已被弃用,在 React 未来的主版本中,只有新名称才有效。

# componentDidUpdate (prevProps, prevState, snapshot?):组件更新了 props 或 state 重新渲染后立即调用它

  • 不会在首次渲染时调用
  • prevProps (更新之前的 props),prevState (更新之前的 state),snapshot (如果你实现了 getSnapshotBeforeUpdate 方法,那么 snapshot 将包含从该方法返回的值。否则它将是 undefined)
  • 如果定义了 shouldComponentUpdate 并且返回值是 false 的话,那么 componentDidUpdate 将不会被调用

# componentWillReceiveProps (nextProps):子组件将要接收新的 props 时调用,第一次不会调用

  • 在 React 17.x 之前叫 componentWillReceiveProps,在 17.x 中使用该钩子,控制台会警告,使用 UNSAFE_componentWillReceiveProps 可解决警告问题。在 18.x 中旧名称已被弃用,在 React 未来的主版本中,只有新名称才有效。

# componentWillUnmount:组件将要卸载前调用

  • 在这个钩子里,可以做一些收尾工作,例如,清除定时器,取消订阅消息等

# 旧版总结

React 旧版本(17.x 之前)生命周期钩子主要分三个阶段,初始化阶段、更新阶段、卸载阶段。如图:

# React 17.x 之后

在 React 17.x 之后,生命周期钩子有所调整

# getDerivedStateFromProps (props, state):返回一个对象来更新 state,或返回 null 不更新任何内容。(使用场景极罕见)

  • 如果定义了 static getDerivedStateFromProps,React 会在初始挂载和后续更新时调用 render 之前调用它
  • 接收 2 个参数,props (组件即将用来渲染的下一个 props)、state (组件即将渲染的下一个 state)

# getSnapshotBeforeUpdate (prevProps, prevState):在 React 更新 DOM 之前时直接调用它,使你的组件能够在 DOM 发生更改之前捕获一些信息(使用场景极罕见)

  • 可以返回你想要的任何类型的快照值,或者是 null,返回的值将作为第三个参数传递给 componentDidUpdate
  • 如果定义了 shouldComponentUpdate 并返回了 false,则 getSnapshotBeforeUpdate 不会被调用
  • 接收两个参数,prevProps (更新之前的 Props)、prevState (更新之前的 State)

# 新版总结

React 17.x 之后生命周期钩子也分三个阶段,初始化阶段、更新阶段、卸载阶段。

与老版本相比,新版本遗弃了 componentWillMount、componentWillUpdate、componentWillReceiveProps 这三个钩子,新增加了两个使用场景极罕见的钩子,getDerivedStateFromProps、getSnapshotBeforeUpdate

编辑 (opens new window)
上次更新: 7/1/2024, 4:56:33 PM
React之Refs的基本使用
React之key的使用

← React之Refs的基本使用 React之key的使用→

Theme by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式