- 从创建到销毁的整个过程,被称之为生命周期
- 生命周期(抽象概念)和生命周期函数的关系
- 生命周期是一个抽象概念,在整个过程中分为很多阶段:
- 例如装载阶段(Mount),组件第一次在DOM树中被渲染的过程
- 例如更新过程(Update),组件状态发生变化,重新更新渲染的过程
- 例如卸载过程(Unmount),组件从DOM树中被移除的过程
- React为了告诉我们当前处于哪些阶段,会对组件内部实现的某些函数进行回调,这些函数就是生命周期函数:
- 例如实现componentDidMount函数,组件已经挂载到DOM上时就会回调
- 例如实现componentDidUpdate函数,组件发生更新时回调
- 例如componentWillUnmount函数,组件即将被移除时回调
- 我们可在这些回调函数中缩写自己的逻辑代码,来满足自己的需求功能
- 谈React生命周期时,主要谈的是类的生命周期,因为函数式组件是没有生命周期函数的(可通过hooks来模拟一些生命周期的回调)
生命周期函数:
- Constructor:
- 如果不初始化state或不进行方法绑定,则不需要为React组件实现构造函数
- constructor通常只做两件事
- 通过this.state赋值对象来初始化内部的state
- 为实践绑定实例(this)
- ComponentDidMount:
- ComponentDidMount() 会在组件挂载后(插入DOM树中)立即调用
- ComponentDidMount通常进行哪些操作:
- 依赖于DOM的操作可以在这进行
- 在此处发送网络请求是最好的地方(官方建议)
- 可以在此处添加一些订阅(会在componentWillUnmount取消订阅)
- ComponentDidUpdate:
- componentDidUpdate() 会在更新后被立即调用,首次渲染不会执行此方法
- 当组件更新后,可以在此处对DOM进行操作
- 如果你对更新前后的props进行了比较,也可以选择在此处进行网络请求(例如:当props未发生变化时,则不会执行网络请求)
- ComponentWillUnmont
- ComponentWillUnmount() 会在组件卸载及销毁之前直接调用
- 执行此方法中执行必要的清理操作
- 例如,清除timer,取消网络请求或清除在componentDidMount() 中创建的订阅等