浅谈react新旧生命周期钩子

 更新时间:2023年12月06日 11:27:46   作者:佛系努力中……  
所谓的生命周期就是指某个事物从开始到结束的各个阶段,本文主要介绍了浅谈react新旧生命周期钩子,具有一定的参考价值,感兴趣的可以了解一下

旧生命钩子

在这里插入图片描述

辅助理解:

  • 红色框:挂载时生命钩子
  • 蓝色框:更新时生命钩子
  • 绿色框:卸载时生命钩子

挂载时

如图所示,我们可以看到,在组件第一次挂载时会经历:构造器(constructor)=》组件将要挂载(componentWillMount)=》组件挂载渲染(render)=》组件挂载完成(componentDidMount)。

更新时

有三条路径可以被触发,分别是红色、橙色和粉色。

在这里插入图片描述

组件内部状态更新:路径2:组件是否应该更新(shouldComponentUpdate)=》组件将要更新(componentWillUpdate)=》组件更新渲染(render)=》组件更新完成(componentDidUpdate)。

  • shouldComponentUpdate,未显性声明时默认返回ture,返回false时组件无法进行更新操作。也就无法执行××××××××》组件将要更新(componentWillUpdate)=》组件更新渲染(render)=》组件更新完成。
shouldComponentUpdate(){
  return false;
}

强制更新:路径3:我们可以调用this.forceUpdate()实现强制更新,这个api和setState一样都是React自带的,一般这个强制更新很少用。
组件将要更新(componentWillUpdate)=》组件更新渲染(render)=》组件更新完成(componentDidUpdate)。

父组件重新render:路径1:在父组件执行完render()之后会被触发。还记得吗?我们蓝色的区域是更新的生命钩子,也就是说第一次render()的时候不算,第二次及之后才会被触发。(componentWillReceiveProps)

import React, { Component } from 'react'

export default class A extends Component {
  state={
    car:'奥迪'
  }
  changeCar= () => {
    this.setState({
      car:'奔驰'
    })
  }
  render() {
    return (
      <div>
        <div>我是组件A</div>
        <button onClick={this.changeCar}>换车</button>
        <B car={this.state.car}/>
      </div>
    )
  }
}

class B extends Component {
  //首次渲染不会被触发
  componentWillReceiveProps(){
    console.log('componentWillReceiveProps')
  }
  render() {
    return (
      <div>
        我是组件B,我接收到的车是:{this.props.car}
      </div>
    )
  }
}

旧生命钩子的总结

在这里插入图片描述

新生命钩子

当你充分理解旧的生命钩子之后,看下面这张图对你来说应该易如反掌。大体来说用来划分的区块方式一致,即:创建时、更新时【三条路径】、卸载时。

在这里插入图片描述

getDerivedSateFromProps

直译:从props哪里获得的派生的State

1.
state ={name:'佛系努力中……'}
//注意点1:需声明为类的静态方法《static》
static getDerivedStateFormProps(props,state){
  //可以读取到props,state
  //注意点2:必须return一个state对象或者null
  return {name:'哈哈哈'} 
  //或者null
}

最后,this.state.name将会被渲染成‘哈哈哈’,直接更改了state的值,且任何操作不会改变该值。 

2.
state ={name:'佛系努力中……'}
static getDerivedStateFormProps(props,state){
  return null
}

如果return null 功能将不会受到影响 

3.此方法使用于state的值在任何时候取决于porps
state ={name:'佛系努力中……'}
static getDerivedStateFormProps((props,state){
  return props
}

总结:这个生命周期钩子会被用到情况很少,并且建议尽量避免使用,防止导致代码冗余,并使组件难以维护。

getSnapshotBeforeUpdate

//在更新之前获得一个快照
getSnapshotBeforeUpdate(prevProps,prevState){
    console.log("getSnapshotBeforeUpdate--",prevProps,prevState)
    return '一只小猫'
}

componentDidUpdate

//组件以及更新完毕,接收三个值,最后一个snapShot,即为getSnapshotBeforeUpdate返回值
componentDidUpdate(prevProps,prevState,snapShot){
    console.log("componentDidUpdate--",prevProps,prevState,snapShot)
 }

一个应用场景
总结:这个东西实际应用场景也很少,嘿嘿!

在这里插入图片描述

到此这篇关于浅谈react新旧生命周期钩子的文章就介绍到这了,更多相关react 生命周期钩子内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • 详解React中的不可变值

    详解React中的不可变值

    这篇文章主要介绍了React中的不可变值的相关资料,帮助大家更好的理解和学习使用react.js,感兴趣的朋友可以了解下
    2021-04-04
  • 封装一个最简单ErrorBoundary组件处理react异常

    封装一个最简单ErrorBoundary组件处理react异常

    这篇文章主要介绍了一个处理react异常的ErrorBoundary组件,简单实用,代码详细,对这个组件感兴趣的朋友可以参考下
    2021-04-04
  • 在 React 项目中全量使用 Hooks的方法

    在 React 项目中全量使用 Hooks的方法

    这篇文章主要介绍了在 React 项目中全量使用 Hooks,使用 Hooks 能为开发提升不少效率,但并不代表就要抛弃 Class Component,依旧还有很多场景我们还得用到它,本文给大家介绍的非常详细,需要的朋友可以参考下
    2022-10-10
  • 深入理解React虚拟Dom

    深入理解React虚拟Dom

    虚拟DOM是一种轻量级的JavaScript对象,用于描述真实网页的DOM结构和属性,存在于内存中,本文就来详细的介绍React虚拟Dom的实现,感兴趣的可以了解一下
    2026-01-01
  • React-Hooks之useImperativeHandler使用介绍

    React-Hooks之useImperativeHandler使用介绍

    这篇文章主要为大家介绍了React-Hooks之useImperativeHandler使用介绍,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • 在React中实现Vue的插槽功能的示例代码

    在React中实现Vue的插槽功能的示例代码

    在 Vue 中,插槽(Slots)允许父组件向子组件传递 HTML 结构,从而实现更灵活的组件复用,具名插槽允许父组件向子组件传递多个不同的 HTML 结构,在 React 中,我们没有直接的插槽概念,但可以通过 props.children 和函数作为 props 来实现类似的功能
    2025-01-01
  • React中路由参数如何改变页面不刷新数据的情况

    React中路由参数如何改变页面不刷新数据的情况

    这篇文章主要介绍了React中路由参数如何改变页面不刷新数据的情况,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • react.js 父子组件数据绑定实时通讯的示例代码

    react.js 父子组件数据绑定实时通讯的示例代码

    本篇文章主要介绍了react.js 父子组件数据绑定实时通讯的示例代码,
    2017-09-09
  • React+EggJs实现断点续传的示例代码

    React+EggJs实现断点续传的示例代码

    这篇文章主要介绍了React+EggJs实现断点续传的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • react中使用signal的项目实践

    react中使用signal的项目实践

    本文主要介绍了react中使用signal的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-03-03

最新评论