React生命周期(新-旧)

20 篇文章 0 订阅

前言

1、生命周期介绍

① 是什么?

组件从创建到挂载页面上运行,再到组件不用时卸载的过程,叫生命周期,只有类组件才有生命周期

②作用

学习组件的生命周期,有助于理解组件的运行方式,完成更复杂的组件更能、分析组件错误原因等。

2、钩子函数介绍

① 是什么?

生命周期的每个阶段总是伴随着一些方法调用,这些方法就是生命周期的钩子函数。

②作用

为开发人员在不同阶段操作组件提供了时机。

生命周期的三个阶段

三阶段分为:创建时、更新时和卸载时。
👉点击此(生命周期结构图)

一、生命周期(旧)

生命周期(旧)

1.初始化阶段(挂载阶段)

① constructor

Ⅰ、执行

组件实例被创建并初始化时触发

Ⅱ、能做什么

  • 通过给 this.state 赋值对象来初始化内部 state。
  • 为事件处理函数绑定实例
② componentWillMount

Ⅰ、执行

componentWillMount() 在挂载之前被调用。

Ⅱ、能做什么

用于准备渲染前的工作

③ render

Ⅰ、执行

根据组件的props和state

Ⅱ、能做什么

渲染UI,返回需要渲染的元素结构

④ componentDidMount

Ⅰ、执行

componentDidMount() 会在组件挂载后(插入 DOM 树中)立即调用。依赖于 DOM 节点的初始化应该放在这里

Ⅱ、能做什么

这个方法是比较适合添加订阅的地方。如果添加了订阅,请不要忘记在 componentWillUnmount() 里取消订阅

2.更新阶段

① shouldComponentUpdate

Ⅰ、执行

当 props 或 state 发生变化时,shouldComponentUpdate() 会在渲染执行之前被调用。

Ⅱ、能做什么

根据shouldComponentUpdate的返回值,判断组件的输出是否受但钱state或peops更改影响。默认行为是state每次发生变化组件都会重新渲染。大部分情况下,应该遵循默认行为。

② componentWillUpdate

Ⅰ、执行

组件即将被重新渲染前触发

Ⅱ、能做什么

用于准备更新前的工作

③ render

Ⅰ、执行

根据组件的props和state

Ⅱ、能做什么

渲染UI,返回需要渲染的元素结构

④ componentDidUpdate

Ⅰ、执行

componentDidUpdate() 会在更新后会被立即调用。首次渲染不会执行此方法。

Ⅱ、能做什么

当组件更新后,可以在此处对 DOM 进行操作。如果你对更新前后的 props 进行了比较,也可以选择在此处进行网络请求。

3.卸载阶段

① componentWillUnmount

Ⅰ、执行

componentWillUnmount() 会在组件卸载及销毁之前直接调用。

Ⅱ、能做什么

在此方法中执行必要的清理操作,例如,清除 timer,取消网络请求或清除在 componentDidMount() 中创建的订阅等。

总结图

二、生命周期(新)

生命周期(新)

1.初始化阶段(挂载阶段)

① constructor

Ⅰ、执行

组件实例被创建并初始化时触发

Ⅱ、能做什么

  • 通过给 this.state 赋值对象来初始化内部 state。
  • 为事件处理函数绑定实例
② getDerivedStateFromProps

Ⅰ、执行

getDerivedStateFromProps 会在调用 render 方法之前调用,并且在初始挂载及后续更新时都会被调用。

Ⅱ、能做什么

它应返回一个对象来更新 state,如果返回 null 则不更新任何内容。

③ render

Ⅰ、执行

根据组件的props和state

Ⅱ、能做什么

渲染UI,返回需要渲染的元素结构

④ componentDidMount

Ⅰ、执行

componentDidMount() 会在组件挂载后(插入 DOM 树中)立即调用。依赖于 DOM 节点的初始化应该放在这里

Ⅱ、能做什么

这个方法是比较适合添加订阅的地方。如果添加了订阅,请不要忘记在 componentWillUnmount() 里取消订阅

2.更新阶段

① getDerivedStateFromProps

Ⅰ、执行

getDerivedStateFromProps 会在调用 render 方法之前调用,并且在初始挂载及后续更新时都会被调用。

Ⅱ、能做什么

它应返回一个对象来更新 state,如果返回 null 则不更新任何内容。

② shouldComponentUpdate

Ⅰ、执行

当 props 或 state 发生变化时,shouldComponentUpdate() 会在渲染执行之前被调用。

Ⅱ、能做什么

根据shouldComponentUpdate的返回值,判断组件的输出是否受但钱state或peops更改影响。默认行为是state每次发生变化组件都会重新渲染。大部分情况下,应该遵循默认行为。

③ render

Ⅰ、执行

根据组件的props和state

Ⅱ、能做什么

渲染UI,返回需要渲染的元素结构

④ getSnapshotBeforeUpdate

Ⅰ、执行

getSnapshotBeforeUpdate() 在最近一次渲染输出(提交到 DOM 节点)之前调用。

Ⅱ、能做什么

它使得组件能在发生更改之前从 DOM 中捕获一些信息(例如,滚动位置)。此生命周期方法的任何返回值将作为参数传递给 componentDidUpdate()。

⑤ componentDidUpdate

Ⅰ、执行

componentDidUpdate() 会在更新后会被立即调用。首次渲染不会执行此方法。

Ⅱ、能做什么

当组件更新后,可以在此处对 DOM 进行操作。如果你对更新前后的 props 进行了比较,也可以选择在此处进行网络请求。

3.卸载阶段

① componentWillUnmount

Ⅰ、执行

componentWillUnmount() 会在组件卸载及销毁之前直接调用。

Ⅱ、能做什么

在此方法中执行必要的清理操作,例如,清除 timer,取消网络请求或清除在 componentDidMount() 中创建的订阅等。

总结图

三、生命周期新旧整体图片

生命周期

四、三个被遗弃的生命周期函数

以下生命周期方法标记为“过时”。这些方法任然有效,但不建议在新代码中使用它们。使用这被遗弃的生命周期需要在前面加上UNSAFE_,但是不加也没事(建议加上)。

1、UNSAFE_componentWillMount()

Ⅰ、执行

UNSAFE_componentWillMount() 是 React 组件生命周期中的一个方法,用于在组件挂载(即被渲染到 DOM 中)之前调用。

Ⅱ、能做什么

在组件更新之前执行一些操作。它接收两个参数:nextProps和nextState,分别表示组件即将更新的props和state。

2、UNSAFE_componentWillReceiveProps()

Ⅰ、执行

用于在组件接收新的props时触发。

Ⅱ、能做什么

允许组件根据即将接收到的新props进行一些操作,例如更新组件的状态或执行一些副作用操作。在这个方法中,可以比较当前props和即将接收到的props的差异,并根据需要进行相应的处理。

3、UNSAFE_componentWillMount()

Ⅰ、执行

当组件的props或state发生变化,并且在重新渲染之前,UNSAFE_componentWillUpdate()方法会被调用。

Ⅱ、能做什么

UNSAFE_componentWillUpdate()的作用是在组件更新之前执行一些操作。它接收两个参数:nextProps和nextState,分别表示组件即将更新的props和state。

五、新增的两个生命周期函数

1、getDerivedStateFromProps

执行:

static getDerivedStateFromProps(props, state)
在组件创建时和更新时的render方法之前调用。

作用:

它应该返回一个对象来更新状态,或者返回null来不更新任何内容。

2、getSnapshotBeforeUpdate

执行:

getSnapshotBeforeUpdate()
被调用于render之后,可以读取但无法使用DOM的时候。

作用:

它使您的组件可以在可能更改之前从DOM捕获一些信息(例如滚动位置)。此生命周期返回的任何值都将作为参数传递给componentDidUpdate()。

React生命周期方法在最版本(React 16.3及以上)中有所改变。下面是React生命周期的最示例: 1. constructor:组件实例化时调用,用于初始化state和绑定事件处理程序。 ```jsx class MyComponent extends React.Component { constructor(props) { super(props); this.state = { name: 'John' }; this.handleClick = this.handleClick.bind(this); } handleClick() { // 处理点击事件 } render() { return ( <div> <h1>Hello, {this.state.name}</h1> <button onClick={this.handleClick}>Click me</button> </div> ); } } ``` 2. static getDerivedStateFromProps:在props更改时调用,用于根据的props更state(不常用)。 ```jsx class MyComponent extends React.Component { constructor(props) { super(props); this.state = { name: props.name }; } static getDerivedStateFromProps(nextProps, prevState) { if (nextProps.name !== prevState.name) { return { name: nextProps.name }; } return null; } render() { return <h1>Hello, {this.state.name}</h1>; } } ``` 3. componentDidMount:组件渲染完成后调用,可以进行异步操作和DOM操作。 ```jsx class MyComponent extends React.Component { componentDidMount() { // 发起异步请求或其他副作用操作 } render() { return <h1>Hello, world!</h1>; } } ``` 4. shouldComponentUpdate:接收的props或state时调用,返回一个布尔值,决定是否触发组件更(优化性能时常用)。 ```jsx class MyComponent extends React.Component { shouldComponentUpdate(nextProps, nextState) { // 根据的props或state决定是否更组件 if (nextProps.someProp !== this.props.someProp) { return true; } return false; } render() { // 组件渲染逻辑 } } ``` 5. componentDidUpdate:组件更后调用,可以进行DOM操作或发起异步请求(需要谨慎使用,避免导致无限循环)。 ```jsx class MyComponent extends React.Component { componentDidUpdate(prevProps, prevState) { // 根据prevProps和prevState进行一些操作 } render() { // 组件渲染逻辑 } } ``` 6. componentWillUnmount:组件卸载前调用,用于清理定时器、取消订阅等操作。 ```jsx class MyComponent extends React.Component { componentWillUnmount() { // 清理操作 } render() { // 组件渲染逻辑 } } ``` 这些是React生命周期的最示例,它们可以帮助你更好地理解和使用React组件的生命周期方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值