学习react之----react的生命周期函数

React官方文档:https://zh-hans.reactjs.org/

在react组件中,代码重用的主要方式是组合而不是继承;在React.component的子类中必须有一个render()函数。

              react的生命周期图谱https://projects.wojtekmaj.pl/react-lifecycle-methods-diagram/

                                             

react组件生命周期的三个阶段及生命周期顺序

一、挂在(当组件实例被创建并插入DOM中时,生命周期顺序如下)

1.constructor()

       在react组件挂载之前,会调用它的构造函数。如果不初始化state或不进行方法绑定,则不需要为react组件实现构造函数。在为React.Component子类实现构造函数时,应在其他语句之前调用super(props)。否则,this.props在构造函数中可能会出现未定义bug。

       通常,在React中,构造函数仅用于一下两种情况:

       1)通过给this.state赋值对象来初始化内部state。

        2)为时间处理函数绑定实例。

2.static getDerivedStateFromProps()

        当state值在任何时候都取决于props时,调用getDerivedStateFromProps()方法;

        getDerivedStateFromProps()会在render方法之前调用,并且初始挂载及后续更新时都会被调用。它应返回一个对象来更新state,如果返回nu'l'l则不更新任何内容。

3.render()

        render()方法是class组件中唯一必须实现的方法;render()函数为纯函数,它不会直接与浏览器直接交互,在不修改组件state的情况下每次调用时返回的结果相同;

        当render被调用时会检查this.props和this.state的变化,并且返回一下类型之一:
        1)react元素

       2)数组或fragments

        3)Portals

        4)字符串或数值类型

        5)布尔类型或null

4.componentDidMount()

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

         (白话:进入界面需要获取数据时使用)

         在componentDidMount()中可以直接调用setState(),将会触发渲染在浏览器之前,(请谨慎使用该模式,因为render()两次调用会导致性能问题,应该在constructor()中初始化state

二、更新(组件中的props或state发生变化时会触发更新,组件更新的生命周期顺序如下)

1.static getDerivedStateFromProps()

2.shouldComponentUpdate()

         不常用的生命周期方法!shouldComponentUpdate(nextProps, nextState)根据返回值,判断React组件输出是否受当前state或props更改的影响。默认行为是state每次发生变化组件都会重新渲染。

          当props或state发生变化时,should Component Update()会在渲染执行之前被调用。返回值默认为true。首次渲染或使用forceUpdate()时不会调用该方法。

3.render()

4.getSnapshotBeforeUpdate()

          getSnapshotBeforeUpdate(prevProps, prevState)方法使用较少,它在最近一次渲染输出(提交到DOM节点)之前调用。使得组件能在发生更改之前从DOM中捕获一些信息。它的任何返回值将作为参数传递给componentDidUpdate()。

5.componentDidUpdate()

三、卸载(组件从DOM中移除)

1.componentWillUnmount()

四、错误处理(当渲染过程,生命周期,或子组件的构造函数中抛出错误时,调用一下方法)

1. static getDerivedStateFromError()

         static getDerivedStateFromError(error)  该生命周期会在组件抛出错误后被调用。它将抛出的错误作为参数,并返回一个值以更新state。

2. componentDidCatch()

         componentDidCatch()在“提交”阶段被调用,允许执行副作用(副作用是啥,我也没搞懂!!);componentDidCatch(error, info)  该生命周期在后代组件抛出错误后被调用。它接收两个参数:

         1) error -------抛出的错误

          2) info --------带有componentStack key的对象,其中包含有关组件引发错误的栈信息。

四、错误处理

1.static getDerivedStateFromError()

2.componentDidCatch()

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值