Wsh's blog Wsh's blog
首页
  • 基础知识
  • ArkUI
  • UIAbility
  • 组件通信方式
  • 前端缓存
  • React
  • typescript
  • javascript
  • flutter
  • node
  • webpack
web3D😉
宝库📰
  • 分类
  • 标签
  • 归档
龙哥的大🐂之路 (opens new window)
GitHub (opens new window)

wsh

热爱前端的程序媛
首页
  • 基础知识
  • ArkUI
  • UIAbility
  • 组件通信方式
  • 前端缓存
  • React
  • typescript
  • javascript
  • flutter
  • node
  • webpack
web3D😉
宝库📰
  • 分类
  • 标签
  • 归档
龙哥的大🐂之路 (opens new window)
GitHub (opens new window)
  • react基础

    • react工具API
    • react组件
    • react生命周期
      • react 事件机制
    • react更新特性

    • react进阶

    • react
    • react基础
    2022-04-30
    目录

    react生命周期

    # 01. 16.4+版本

    # React 生命周期分为三种状态

    1. 挂载
    2. 更新
    3. 销毁

    # 挂载

    # 01. constructor():

    在这个阶段,会获取到外层传递的props数据,这里进行组件初始化的工作,内部state的定义,和组件本身逻辑的初始化。只在组件创建时执行一次,其后不再执行。

    # 02. static getDerivedStateFromProps(nextProps, prevState):

    它是一个静态方法,在这里不能调用this,开发者使用时不能写出副作用的代码。通过参数提供的nextProps以及prevState来进行判断,根据新传入的props来映射到state,保证了 state 和 props 之间的简单关系以及不需要处理第一次渲染时 prevProps 为空的情况。 nextProps:第一个参数是父组件传来的props中的数据 prevState:第二个参数是本组件state中的数据。

    必须return一个对象或null。如果是对象,则会合并到本组件的state中去。

    static getDerivedStateFromProps(nextProps, prevState) {
        const {type} = nextProps;
        // 当传入的type发生变化的时候,更新state
        if (type !== prevState.type) {
            return {
                type,
            };
        }
        // 否则,对于state不进行任何操作
        return null;
    }
    
    

    # 03. render():

    渲染页面的主要地方,其中可以实现一些操作,但是必须返回一个jsx对象。会反复调用,减少不必要的render()函数调用次数可以实现性能优化。

    # 04 componentDidMount():

    在render之后调用,在这里可以操作更新后的组件DOM

    # 组件更新:

    触发组件的更新条件:

    1. 本组件自身调用setState,会触发re-render(重新渲染)。
    2. 父组件触发re-render,子组件连带着被re-render。
    3. props改变了,会触发本组件re-render。
    # 01. static getDerivedStateFromProps()

    与组件创建时一样操作。

    # 02. shouldComponentUpdate():

    主要用来对reacr进行性能优化。返回一个true或false。默认返回true

    • 第一个参数为nextProps: 马上要生效的props值,
    • 第二个参数为nextState:马上要生效的state值。获取现在的值为this指针。 return false; 就不会向下执行,也就减少了render次数,优化了性能。

    提示

    PureComponent比较props中的所有属性,优先决定当前组件是否需要re-render。 但是:PureComponent只做简单的属性值“浅比较”。 浅比较对于值类型还可以,对于引用类型只会比较它们在内存中的地址是否相同,不会进行深层次的比较。 若传过来一个地址不同,内容相同的引用类型,PureComponent无法进行深层次比较。

    # 03.render():

    更新阶段渲染,可以根据新的数据渲染组件的dom节点。

    # 04. getSnapshotBeforeUpdate():

    在该函数中一般执行一些dom操作。记录滚动位置。 例如:可以滚动的页面,刷新后,需要在本函数中记录其位置,然后传给componentDidUpdate()函数,在更新结束后,回到该位置。 有两个参数:prevProps,prevState。必须return

    getSnapshotBeforeUpdate(prevProps, prevState){
        return { y: 50 }
    }
    componentDidUpdate(prevProps, prevState, snapshot){
        console.log(snapshot) // { y: 50 }
    }
    

    # 05. componentDidUpdate():

    该函数主要在更新完成时执行。

    • prevProps: 第一个参数为prevProps,更新前的props值,
    • prevState: 第二个参数表示更新前的state中的值。当前值为this.props。
    • 第三个参数为getSnapshotBeforeUpdate()return传过来的数据。

    这个函数表示最新的state对应的dom更新完毕,所以可以对最新的dom做一些自定义操作。

    # 组件卸载:componentWillUnmount

    在组件被卸载前调用,这里会处理一些数据清理、定时器清理等工作来避免内存泄露。主要用来释放相关的内存空间和资源。

    # 02. 16.3-16.0 版本:

    # 03. <16.0 版本:

    生命周期 (opens new window)

    #react
    react组件
    react 事件机制

    ← react组件 react 事件机制→

    最近更新
    01
    组件通信方式
    01-07
    02
    UIAbility
    01-07
    03
    ATKTS
    01-06
    更多文章>
    Theme by Vdoing | Copyright © 2022-2025 Wsh | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式