react 16 生命周期

在这里插入图片描述

  • constructor:初化生命周期函数
    1.在这个生命周期函数里面,可以定义当前组件需要的一些状态,通过this.state = { }来定义状态
    2.当前生命周期必须使用super这个方法,否则会报错;当前组件的状态必须定义在this.state里面
    3.super( ):用来实现继承
  • getDerivedStateFromProps
    1.替代原有的componentWillReceiveProps
    2.将传入的 props映射到state上
    3.每次re-rendering之前被调用
    4.即使你的props没有任何变化,而是state发生了变化,导致组件发生了re-render,这个生命周期函数依然会被调用
    5.需要注意的是,如果props传入的内容不需要影响到你的state,那么就需要返回一个null,这个返回值是必须的,所以尽量将其写到函数的末尾。
 static getDerivedStateFromProps(props, state) {
    const { pathname } = state;
    if (props.location.pathname !== pathname) {
      return {
        pathname: props.location.pathname,
        openKeys: getDefaultCollapsedSubMenus(props),
      };
    }
    return null;
  }
  • render:渲染
    1.render函数用来渲染虚拟DOM,其实就是讲真实的js对象与数据相结合生成真正的DOM
    2.render函数什么时候会执行?当this.state或者this.props的数据发生改变的时候那么render函数就会执行
    3.render函数第一次执行的时候会将渲染的结果保存在缓存中,当this.state 或者 this.props发生改变的时候,那么render函数就会再次执行,这次执行的时候会将上一次的缓存结果,和这一次渲染的结果进行对比,比较哪一个虚拟DOM节点发生了改变,找到这个节点后会重新渲染这个节点而不是虚拟DOM,像这样的对比方式叫做diff算法,当渲染完毕以后会将这次的结果再次保存在缓存之中
  • componentDidMount:挂载后(插入 DOM 树中)立即调用
    1.当render函数执行完毕后,也就是虚拟DOM和数据结合完毕以后生成了真实的DOM结果,在这个声明周期函数里面我们可以获取到真是的DOM,同时也可以在当前的生命周期函数中进行ajax请求。
  • componentWillUnmount:销毁
    1.当组件被隐藏的时候就会被销毁掉,可以在这个生命周期里面将事件绑定的函数进行解绑等操作
  • shouldComponentUpdate:dom是否开始改变(里面接收两个新值,一个是新的props,一个是新的state)
    1.如果this.state 或者 this.props发生改变的时候这个生命周期函数就回去执行
    2.当前生命周期函数必须要返回一个布尔值,如果返回true则进行更新,下面的生命周期数会执行;否则不更新,不执行。
    3.我们可以进行数据的对比来决定当前的虚拟DOM是否需要更新,可以提高性能。我们可以在当前的声明周期函数里面进行性能的优化
    4.当前生命周期函数判断的不是数据是否需要更新,而是DOM是否需要更新,哪怕在当前的生命周期函数中return false,this.state 或者 this.props里面的数据也会发生改变,只不过return false 时不会执行下面的生命周期函数了
  • getSnapshotBeforeUpdate
    1.执行于render 方法之后,真实 DOM 更新之前
    2.使用方法类似于getDerivedStateFromProps,需要return
    3.返回值为componentDidUpdate的第三个参数
    4.可以获取到更新前后的state和props
getSnapshotBeforeUpdate(prevProps, prevState) {
	return 'hello world'
}
  • componentDidUpdate
    1.当前生命周期函数是更新完毕,在这里我们可以获取最新的一些DOM结构。也可以看到更新后最新的一些数据
    2.在当前生命周期函数里面接受到3个参数 一个是旧的props 一个是旧的state,一个是getSnapshotBeforeUpdate返回的值

    如有不对,欢迎指出,在此感谢_

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值