IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 【react框架】组件的新旧生命周期 -> 正文阅读

[JavaScript知识库]【react框架】组件的新旧生命周期

前言

本来按照我的学习理念,学新不学旧,还可以减少记忆负担,但无奈听说面试都喜欢问react的新旧生命周期问题,只能都记录一下了。淦!

旧生命周期

先上完整生命周期图(图片来源尚硅谷免费课程):
在这里插入图片描述

挂载阶段

react组件在挂载阶段,先会执行类定义里的constructor构造器,初始化阶段

//构造器
constructor(props) {
  super(props);
  //可以做些事,例如初始化状态
  this.state = { count: 0 };
}

然后进入render钩子,渲染阶段

// 写jsx渲染html
render() {
  const { count } = this.state;
  return (
    <div>
		{count}
    </div>
  );
}

接着进入componentDidMount钩子,组件已挂载阶段

componentDidMount() {
	// 常用,一般在这个钩子中做一些初始化的事,例如:开启定时器、发送网络请求、订阅消息。
}

更新阶段

状态更新

this.setState()触发开始,先进入shouldComponentUpdate()钩子,控制组件更新的“阀门”:

shouldComponentUpdate() {
  // 不写这个钩子的话,底层默认返回true,自己改写的话必须返回布尔值
  return true; // 如果为false生命周期就不会走下去,被截胡在这
}

然后进入componentWillUpdate()钩子,组件将要更新

componentWillUpdate() {}

然后进入render()钩子,再进入componentDidUpdate()钩子,组件更新完成

componentDidUpdate() {}

强制更新

通过调用this.forceUpdate(),不更改任何数据,强制更新,进入生命周期流程,结合上文加看图。

父组件更新

例如父组件中传给子组件显示的数据在父组件中发生了改变,子组件中进入生命周期流畅(看图),先进入componentWillReceiveProps()钩子,组件接收新props

componentWillReceiveProps(props) {
  // 拿到新props做一些事情
}

然走接下来的流程,结合上文看图。

卸载阶段

当组件将要卸载,会进入componentWillUnmount钩子函数,一般会用于清除一些定时器,实例,取消订阅消息等。例如:

componentWillUnmount() {
  //清除定时器
  clearInterval(this.timer); // 防止定时器叠加
}

可以通过ReactDOM.unmountComponentAtNode(document.getElementById(""))来强制卸载组件。

新生命周期

先上完整生命周期图(图片来源尚硅谷免费课程):
在这里插入图片描述
总的来说就是即将废弃三个钩子函数componentWillReceiveProps()componentWillMount()componentWillUpdate()。新增两个,下面讲解。

getDerivedStateFromProps

用处:若state的值在任何时候都取决于props,那么可以使用getDerivedStateFromProps()。官方说尽量少用或不用,容易导致代码冗余。

static getDerivedStateFromProps(props, state) { // 需要加静态修饰符 
  console.log("getDerivedStateFromProps", props, state);
  return null; // 必须返回一个null或者state对象,返回的state对象会覆盖state原值,如果直接返回props,那么state的值在任何时候都取决于props,所以叫state派生于prop
}

getSnapshotBeforeUpdate

在即将更新视图的时候,像快门一样咔擦停住:

getSnapshotBeforeUpdate() {
  return xxx // 这里可以返回值,在componentDidUpdate可以获取到,例如componentDidUpdate()可以拿到更新前的数据
}

componentDidUpdate(preProps, preState, snapshotValue) {
	// 拿到更新前的props,state,getSnapshotBeforeUpdate的快照值
	console.log(
	  "Count---componentDidUpdate",
	  preProps,
	  preState,
	  snapshotValue
	);
}

再结合图好好看看就能懂了~

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-14 10:46:04  更:2021-07-14 10:46:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/9 5:11:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码