React---day5

article/2025/7/19 6:35:53

4、React的组件化

组件的分类:

  • 根据组件的定义方式,可以分为:函数组件(Functional Component )和类组件(Class Component);
  • 根据组件内部是否有状态需要维护,可以分成:无状态组件(Stateless Component )和有状态组件(Stateful Component);
  • 根据组件的不同职责,可以分成:展示型组件(Presentational Component)和容器型组件(Container Component);

函数组件、无状态组件、展示型组件主要关注UI的展示;
类组件、有状态组件、容器型组件主要关注数据逻辑;

类组件:

import React from "react";
export class App extends React.Component{constructor(){super();this.state =  {counter : 0}}render(){return (<div><h2>当前计数为{this.state.counter}</h2></div>)}
}

函数组件:

export function Func (){return (<div><span>我是function的组件:App组件</span></div>)
}

类组件:

  • 组件的名称是大写字符开头(无论类组件还是函数组件)
  • 类组件需要继承自 React.Component
  • 类组件必须实现render函数

函数组件:

  • 没有生命周期,也会被更新并挂载,但是没有生命周期函数;
  • 没有this(组件实例);
  • 没有内部状态(state);
  • 我们来定义一个函数组件:

render函数的返回

  • React 元素:

    通常通过 JSX 创建。例如,

    会被 React 渲染为 DOM 节点, 会被 React 渲染为自定义组件;无论是
    还是 均为 React 元素。

  • 数组或 fragments:使得 render 方法可以返回多个元素。

  • Portals:可以渲染子节点到不同的 DOM 子树中。

  • 字符串或数值类型:它们在 DOM 中会被渲染为文本节点

  • 布尔类型或 null:什么都不渲染。

5、React的生命周期

什么是生命周期:

  • 比如装载阶段(Mount),组件第一次在DOM树中被渲染的过程;
  • 比如更新过程(Update),组件状态发生变化,重新更新渲染的过程;
  • 比如卸载过程(Unmount),组件从DOM树中被移除的过程;

生命周期函数:

  • 比如实现componentDidMount函数:组件已经挂载到DOM上时,就会回调;
  • 比如实现componentDidUpdate函数:组件已经发生了更新时,就会回调;
  • 比如实现componentWillUnmount函数:组件即将被移除时,就会回调;

在这里插入图片描述

详解生命周期函数:

Constructor
如果不初始化 state 或不进行方法绑定,则不需要为 React 组件实现构造函数。
constructor中通常只做两件事情:

  • 通过给 this.state 赋值对象来初始化内部的state;
  • 为事件绑定实例(this);

componentDidMount
componentDidMount() 会在组件挂载后(插入 DOM 树中)立即调用。
componentDidMount中通常进行哪里操作呢?

    • 依赖于DOM的操作可以在这里进行;
    • 在此处发送网络请求就最好的地方;(官方建议)
    • 可以在此处添加一些订阅(会在componentWillUnmount取消订阅);

componentDidUpdate

  • componentDidUpdate() 会在更新后会被立即调用,首次渲染不会执行此方法。
  • 当组件更新后,可以在此处对 DOM 进行操作;
  • 如果你对更新前后的 props 进行了比较,也可以选择在此处进行网络请求;(例如,当 props 未发生变化时,则不会执行网络请求)。

componentWillUnmount

  • componentWillUnmount() 会在组件卸载及销毁之前直接调用。
  • 在此方法中执行必要的清理操作;例如,清除 timer,取消网络请求或清除,在 componentDidMount() 中创建的订阅等;

不常用的生命周期函数

getDerivedStateFromProps

getDerivedStateFromProps 是 React 16.3 引入的一个静态生命周期方法,用于在组件接收到新的 props 时同步更新 state

  • 作用:确保 stateprops 保持同步,特别是当 state 的值完全依赖于 props 时。
  • 调用时机:在组件初始化、接收到新的 props 或父组件强制更新时被调用。
  • 返回值:返回一个对象,表示需要更新的 state,如果不需要更新则返回 null

getSnapshotBeforeUpdate

getSnapshotBeforeUpdate 是在 React 更新 DOM 之前调用的一次性生命周期函数,用于获取 DOM 更新前的一些信息(如滚动位置)。

  • 作用:在组件更新之前捕获 DOM 的某些状态,以便在更新后使用这些信息。
  • 调用时机:在 render 方法之后、DOM 更新之前调用。
  • 返回值:返回值将作为 componentDidUpdate 的第三个参数传递。

shouldComponentUpdate

shouldComponentUpdate 是一个性能优化的生命周期函数,用于决定组件是否需要重新渲染。

  • 作用:通过返回 truefalse 控制组件的更新,从而避免不必要的渲染。
  • 调用时机:在组件接收到新的 propsstate 时,但在 render 之前调用。

6、组件之间进行数据传递

父传子:

父组件:

 <div><ChildCpn name="蒋乙菥" age="18" height="1,88" />
</div>

子组件:

export class ChildCpn extends React.Component{render(){const {name , age , height} = this.propsreturn (<div><h2>{"姓名" + name + "," + "年龄" + age + "身高" + height}</h2></div>)}}

制更新时被调用。

  • 返回值:返回一个对象,表示需要更新的 state,如果不需要更新则返回 null

getSnapshotBeforeUpdate

getSnapshotBeforeUpdate 是在 React 更新 DOM 之前调用的一次性生命周期函数,用于获取 DOM 更新前的一些信息(如滚动位置)。

  • 作用:在组件更新之前捕获 DOM 的某些状态,以便在更新后使用这些信息。
  • 调用时机:在 render 方法之后、DOM 更新之前调用。
  • 返回值:返回值将作为 componentDidUpdate 的第三个参数传递。

shouldComponentUpdate

shouldComponentUpdate 是一个性能优化的生命周期函数,用于决定组件是否需要重新渲染。

  • 作用:通过返回 truefalse 控制组件的更新,从而避免不必要的渲染。
  • 调用时机:在组件接收到新的 propsstate 时,但在 render 之前调用。

http://www.hkcw.cn/article/qJwfTcCmtV.shtml

相关文章

Muplayer——轻量级在线JavaScript 音乐播放器

简单的 JavaScript 音乐播放器 GitHub 地址&#xff1a;https://github.com/Wcowin/Muplayer 在线地址&#xff1a;https://wcowin.work/Muplayer/ 本项目是一个基于原生 JavaScript、HTML 和 CSS 实现的响应式音乐播放器&#xff0c;支持本地音乐添加、播放列表管理、搜索、…

毫秒断电,安全守护|维安WPB系列主动型熔断器重磅登场!

1 主动型熔断器 新能源时代的“主动保护”趋势 随着新能源汽车行业的高速发展&#xff0c;其相关安全事故也层出不穷。为此&#xff0c;工信部于2025 年3月 28 日组织制定了强制性国家标准《电动汽车用动力蓄电池安全要求》&#xff08;GB38031-2025&#xff09;&#xff0c…

Java—— 多线程 第二期

等待唤醒机制(生产者和消费者) 说明 之前的多线程是谁抢到CPU的执行权谁执行&#xff0c;而等待唤醒机制作为一种经典的多线程协作模式&#xff0c;可以实现线程的交替执行。 成员 实现等待唤醒机制需要三个成员&#xff1a;生产者、消费者、标志位 可以分别看作厨师、吃货、…

2025年最新《Python程序设计》题库(含答案)

判断题填空题选择题程序题 点击文末名片可以下载python工具和完整题库&#xff01; 第 1 章 基础知识 &#xff08;部分展示&#xff09; 1、 Python 是一种跨平台、开源、免费的高级动态编程语言。 2、 Python 3.x 完全兼容 Python 2.x。 3、 Python 3.x 和 Python 2.x 唯…

【AI非常道】二零二五年五月,AI非常道

经常在社区看到一些非常有启发或者有收获的话语&#xff0c;但是&#xff0c;往往看过就成为过眼云烟&#xff0c;有时再想去找又找不到。索性&#xff0c;今年开始&#xff0c;看到好的言语&#xff0c;就记录下来&#xff0c;一月一发布&#xff0c;亦供大家参考。 前面的记…

Linux入门(十一)进程管理

Linux 中每个执行的程序都称为一个进程&#xff0c;每个进程都分配一个ID号&#xff08;PID&#xff09; 每个进程都可能以两种方式存在&#xff0c;前台&#xff08;屏幕上可以操作的&#xff09;和后台&#xff08;屏幕上无法看到的&#xff09;&#xff0c;一般系统的服务都…

晨控CK-UR12与西门子PLC配置Modbus TCP通讯连接操作手册

晨控CK-UR12与西门子PLC配置Modbus TCP通讯连接操作手册 晨控CK-UR12系列作为晨控智能工业级别RFID读写器,支持大部分工业协议如RS232、RS485、以太网。支持工业协议Modbus RTU、Modbus TCP、Profinet、EtherNet/lP、EtherCat以及自由协议TCP/IP等。 本期主题&#xff1a;围绕…

Python使用

Python学习&#xff0c;从安装&#xff0c;到简单应用 前言 Python作为胶水语言在web开发&#xff0c;数据分析&#xff0c;网络爬虫等方向有着广泛的应用 一、Python入门 相关基础语法直接使用相关测试代码 Python编译器版本使用3以后&#xff0c;安装参考其他教程&#xf…

高德地图应用OceanBase单元化构建下一代在线地图服务

IEEE International Conference on Data Engineering (ICDE) 是数据库和数据工程领域的顶级学术会议之一&#xff08;与SIGMOD、VLDB并成为数据库三大顶会&#xff09;&#xff0c;自1984年首次举办以来&#xff0c;每年举办一次。ICDE涵盖广泛的主题&#xff0c;包括数据库系统…

软考-系统架构设计师-第十九章 嵌入式系统架构设计理论与实践

嵌入式系统架构设计理论与实践 19.1 嵌入式系统发展历程19.2 嵌入式系统硬件19.3 嵌入式系统软件19.4 嵌入式系统软件架构设计方法19.5 嵌入式系统软件架构实践 19.1 嵌入式系统发展历程 发展历程硬件软件主要特点单片微型计算机&#xff08;SCM&#xff09;单片机无操作系统 …

DeepSeek-R1 重磅升级,智能体验再进化!

DeepSeek AI 爱好者们注意啦&#xff01;DeepSeek R1 模型完成小版本升级&#xff0c;新版本 DeepSeek-R1-0528 震撼登场。想体验超强思考与推理能力&#xff1f;官方网站、APP、小程序&#xff0c;一键开启 “深度思考” 功能&#xff0c;新版等你来探索&#xff01;API 也同步…

预处理深入详解:预定义符号、宏、命名约定、命令行定义、条件编译、头文件的包含

目录 一、预定义符号 二、#define定义常量 三、宏 &#xff08;一&#xff09;#define定义宏 &#xff08;二&#xff09;带有副作用的宏参数 &#xff08;三&#xff09;宏替换的规则 &#xff08;四&#xff09;宏和函数的对比 四、#和## &#xff08;一&#xff09…

深度解析:跨学科论文 +“概念迁移表” 模板写作全流程

跨学科论文速通&#xff01;融合“概念迁移表”的写作导航模板 你的论文是否曾被导师皱眉评价为“四不像”&#xff1f;不同学科的术语在稿纸上打架&#xff0c;核心逻辑若隐若现&#xff1f; 别让心血沦为学术混搭的牺牲品。一张精心设计的 概念迁移表&#xff0c;能将两个看…

Linux安装及管理程序

1 Linux应用程序基础 1.1 Linux 命令与应用程序的关系 在 Linux 操作系统中&#xff0c;一直以来命令和应用程序并没有特别明确的区别&#xff0c;从长期使用习惯来看&#xff0c;可以通过以下描述来对两者进行区别&#xff1a; 应用程序命令的执行文件大多比较小&#xff0…

历年南京大学计算机保研上机真题

2025南京大学计算机保研上机真题 2024南京大学计算机保研上机真题 2023南京大学计算机保研上机真题 在线测评链接&#xff1a;https://pgcode.cn/school Count Number of Binary Strings 题目描述 Given a positive integer n n n ( 3 ≤ n ≤ 90 3 \leq n \leq 90 3≤n≤…

酒店管理系统设计与实现

本科毕业设计(论文) 设计(论文)题目 酒店管理系统设计与实现 学生姓名 学生学号 所在学院 专业班级 校内指导教师 李建 企业指导教师 毕业设计(论文)真实性承诺及声明 学生对毕业设计(论文)真实性承诺 本人郑重声明:所提交的毕业设计(论文)作品是本人在指导教师的指…

Java web学习路径预览

Java web学习路径预览 &#xff08;图源&#xff1a;黑马程序员&#xff09; 目录 Java web学习路径预览 一、HTML、CSS、JS 1. HTML (HyperText Markup Language): 网页的骨架 2. CSS (Cascading Style Sheets): 网页的皮肤 3. JavaScript (JS): 网页的行为 二、Ajax、…

QEMU/KVM课程大纲暨学习路线(1)

一、背景 去年(2024年)10月份,在CSDN上有一位网友联系到我,说有需要我帮忙的地方。加了微信之后,他说了要帮助的事情。原来是他看到了我的QEMU/KVM相关文章,阅读之后觉得符合他们的要求,所以想让我帮他们开发QEMU/KVM相关的课程。 经过沟通和了解,他们之前请了一位老师…

得物前端面试题及参考答案(精选50道题)

浏览器强制缓存和协商缓存的机制及区别 浏览器缓存机制用于减少网络请求、提升页面加载性能&#xff0c;强制缓存和协商缓存是其中两种核心策略。 强制缓存的机制&#xff1a;当浏览器请求资源时&#xff0c;首先检查该资源在本地缓存中的有效期。有效期由响应头中的Cache-Con…

动态IP与区块链:重构网络信任的底层革命

在数字经济蓬勃发展的今天&#xff0c;网络安全与数据隐私正面临前所未有的挑战。动态IP技术与区块链的深度融合&#xff0c;正在构建一个去中心化、高可信的网络基础设施&#xff0c;为Web3.0时代的到来奠定基础。 一、技术碰撞&#xff1a;动态IP与区块链的天然契合 动态I…