react-10-钩子函数-生命周期

简介: 前文state的文章已经用到了 生命周期函数,但是还没有详细讲解,这节课,详细的分析下理清楚他们什么时候调用,也就清楚这些钩子有什么用了

1. 前言


前文state的文章已经用到了 生命周期函数,但是还没有详细讲解,这节课,详细的分析下

理清楚他们什么时候调用,也就清楚这些钩子有什么用了


2. 计数器 demo


通过计数器demo来 分析 钩子

  1. 定义state   用来计数
  2. render  布局
  3. 点击 事件    this 修改方式 箭头函数用法
  4. setState()的回调函数用法
  5. 构造函数 和 渲染函数里面 有  打印 ,用来标记 执行顺序


class Numbers extends React.Component {
        state = { n: 0 };
        constructor(){
            super();
            console.log("1  constructor");
        }
        render() {
            console.log("3 render");
          return (
            <div>
              <p>{this.state.n}</p>
              <button
                onClick={() => {
                  this.setState(oldState => {
                    return {
                      n: oldState.n + 1
                    };
                  });
                }}
              >
                点击累加
              </button>
            </div>
          );
        }
      }
      ReactDOM.render(<Numbers />, box);



3. 钩子核心


这个需要 自己 写一遍 ,看看打印 ,大概了解顺序 ,在看具体的解析


// 不在这里发请求   布局还没好太早了 
        // render都没走,肯定获取不到DOM
        componentWillMount() {
          console.log("2 Component WILL MOUNT!----- DOM没有创建完");
        }
        componentDidMount() {
          console.log("4 Component DID MOUNT!----DOM创建完了, 可以发请求");
        }
        componentWillReceiveProps(newProps) {
          console.log("5 Component WILL RECEIVE PROPS!");
        }
        // 状态修改了, 组件是否要更新数据?/render走不走
        //  true  更新
        //  false 不更新
        //  深入的时候 哪些需要更新 哪些不需要  优化
        shouldComponentUpdate(newProps, newState) {
            console.log("1 should Component Update-----应该更新",newState);
            if(newState.n%2 === 0) return true
          return false;
        }
        // 更新函数
        // 其实我们点击的时候已经set了 但是其实this.state还没有变
        componentWillUpdate(nextProps, nextState) {
          console.log("2 Component WILL UPDATE!----将要更新",nextState,this.state);
          // this.state还没有变
        //   3  render
        }
        componentDidUpdate(prevProps, prevState) {
          console.log("4 Component DID UPDATE!------已经更新");
        }
        componentWillUnmount() {
          console.log("Component WILL UNMOUNT!----将要卸载");
        }



4. 总结 执行顺序


这个还是建议 自己跑一遭 ,印象更深

4.1 首次加载

  1. constructor
  2. Component WILL MOUNT
  3. render
  4. Component DID MOUNT

4.2 状态更新 比如点击了 按钮计数器增加

  1. shouldComponentUpdate
  2. componentWillUpdate
  3. render
  4. componentDidUpdate


5.  钩子功能介绍


5.0  constructor:

组件的构造函数,组件更新到界面上之前会先调用

1.用于初始化内部状态,很少使用

2.唯一可以直接修改 state 的地方

5.1 componentWillMount

组件will将要 加载  ,那就是还没加载 所以 还没有走render,自然没有DOM

5.2 componentDidMount

组件已经加载 ,DOM已经存在 ,通常在这里发请求

1.UI 渲染完成后调用

2.只执行一次

3.典型场景:获取外部资源

5.3 shouldComponentUpdate(nextProps, nextState)

告诉组件是否需要重新渲染,用于性能优化,比如判定指定 props 发生改变,组件才进行重新渲染

should 应该更新吗???

返回 true代表可以更新 ,false代表不更新

例如上边代码中的例子 偶数更新,奇数不更新

1.决定虚拟 DOM是否需要重绘

2.一般可以由 PureComponent自动实现

3.典型场景:性能优化

也就是说,你想优化渲染效率,可以在这里面进行操作,当然一般情况下是用不到的,用到了就不是一般情况

5.4 componentWillUpdate

这个wil是将要更新 ,也就是还没有更新,

虽然说你点击的时候 已经走了 setState()方法,但这个和 vue一样是不会立刻更新DOM

5.5 componentDidUpdate(prevProps, prevState)

1.每次 UI 更新时被调用

2.典型场景:页面需要根据 props 变化重新获取数据

5.6 componentWillUnmount

做些资源释放,卸载副作用的事情

删除组件或者  切换界面 的时候调用

清理操作,例如,清除 timer,取消网络请求


6. 更多的用法  等你去 探索





相关文章
|
3月前
|
前端开发 开发者
React 函数组件与类组件对比
【10月更文挑战第4天】本文详细比较了React中的函数组件与类组件。函数组件是一种简单的组件形式,以纯函数的形式返回JSX,易于理解与维护,适用于简单的UI逻辑。类组件则是基于ES6类实现的,需要重写`render`方法并能利用更多生命周期方法进行状态管理。文章通过示例代码展示了两者在状态管理与生命周期管理上的差异,并讨论了常见的问题如状态更新异步性与生命周期管理的复杂性,最后给出了相应的解决方法。通过学习,开发者可以根据具体需求选择合适的组件类型。
84 8
|
3月前
|
前端开发 JavaScript
React 组件生命周期
React 组件生命周期
38 0
|
2月前
|
前端开发 JavaScript
react 组件的生命周期
React组件的生命周期包括从创建到销毁的各个阶段,如挂载(mounting)、更新(updating)和卸载(unmounting)。每个阶段都有特定的方法,用于控制组件的行为和状态,确保高效、有序地渲染和管理UI。
|
4月前
|
前端开发 JavaScript 区块链
react18函数组件+antd使用指南-使用代码集合以及报错记录汇总
本文介绍了多个React开发中常见的问题及其解决方案,包括但不限于:1)`useForm`实例未连接到任何`Form`元素的警告及解决方法;2)监听页面滚动事件的实现方式;3)React 18与antd 5.8.6中定制主题的方法;4)React结合antd 4.x版本自定义主题色的步骤;5)解决`ResizeObserver loop`相关报错的技巧;6)处理React设计表单时遇到的CDN资源加载失败问题;7)解决onClick事件传参问题;8)修复类型错误等。每部分均提供详细分析与实用代码示例,帮助开发者快速定位并解决问题。
74 2
|
4月前
|
XML JavaScript 前端开发
学习react基础(1)_虚拟dom、diff算法、函数和class创建组件
本文介绍了React的核心概念,包括虚拟DOM、Diff算法以及如何通过函数和类创建React组件。
43 3
|
4月前
|
前端开发 JavaScript 开发者
介绍一下React生命周期
介绍一下React生命周期
116 9
|
4月前
|
前端开发
react学习(22)高阶函数和函数柯里化
react学习(22)高阶函数和函数柯里化
|
3月前
|
存储 前端开发 JavaScript
深入理解React组件的生命周期与Hooks
【10月更文挑战第7天】深入理解React组件的生命周期与Hooks
167 0
|
4月前
|
前端开发 API UED
React组件生命周期详解
【9月更文挑战第4天】在React应用开发中,掌握组件生命周期对于管理状态和属性至关重要,并能有效提升应用性能。本文详细介绍了React组件生命周期的三个阶段:挂载、更新和卸载,并通过代码示例展示了如何避免状态更新导致的死循环及优化网络请求等问题,帮助开发者构建更高效、可维护的应用。
99 2
|
5月前
|
前端开发 JavaScript
React 组件生命周期方法详解
【8月更文挑战第30天】
66 5