WEB前端将指定DOM生成图片并下载最佳实践(html2canvas)
前言:
html2canvas 是一个 JavaScript 库,其主要作用是将 HTML 元素或其部分内容渲染为 Canvas 图像。通过它,开发者可以将网页中的任意 DOM 元素(包括文本、图片、样式等)转换为图片格式(如 PNG 或 JPEG),并进一步用于保存、分享或其他处理。
html2canvas 的使用:
安装html2canvas
npm install html2canvas --save
vue3示例:
完整代码:
<template><div><div class="image-box" ref="downloadRef"><div class="text">恭顺安康</div><img class="picture" src="@/assets/images/study-dog.png" alt="" /></div><el-button type="primary" plain @click="download">下载图片</el-button></div>
</template><script setup>
import { ref } from "vue";
import html2canvas from 'html2canvas'const downloadRef = ref();
const download = () => {html2canvas(downloadRef.value).then((canvas) => {let dataURL = canvas.toDataURL("image/png"); //base64格式的图片 url// 创建a标签下载图片var addElement = document.createElement("a");addElement.href = dataURL;addElement.download = "恭顺安康.png"; //设置下载的图片名称document.body.appendChild(addElement);addElement.click();document.body.removeChild(addElement);});
};
</script><style lang="less" scoped>
.image-box {width: 500px;height: 520px;border: 1px solid #ccc;background-color: aqua;display: flex;justify-content: center;align-items: center;flex-direction: column;font-weight: 700;font-size: 28px;margin-bottom: 10px;.text {color: #fff;margin-bottom: 10px;}.picture {width: 400px;height: 400px;}
}
</style>
效果演示:
我们还可以将base64格式的图片转化成file或blob格式的图片,兼容性会更好一些。完整代码如下:
<template><div><div class="image-box" ref="downloadRef"><div class="text">恭顺安康</div><img class="picture" src="@/assets/images/study-dog.png" alt="" /></div><el-button type="primary" plain @click="download">下载图片</el-button></div>
</template><script setup>
import { ref } from "vue";
import html2canvas from "html2canvas";const downloadRef = ref();const dataURLtoBlob = (dataurl) => {var arr = dataurl.split(","); //分割为数组,分割到第一个逗号let bstr = window.atob(arr[1]);let n = bstr.length;let u8arr = new Uint8Array(n);while (n--) {u8arr[n] = bstr.charCodeAt(n);}return new Blob([u8arr], { type: "png" });
};const download = () => {html2canvas(downloadRef.value).then((canvas) => {let dataURL = canvas.toDataURL("image/png"); //base64格式的图片 urlconst blobUrl = dataURLtoBlob(dataURL); //转化成blob格式的图片 Blob{size:xx,type:xx}var fileUrl = URL.createObjectURL(blobUrl); //URL.createObjectURL()创建一个指向File或Blob对象的URL。这个URL可以被用于指定一个HTML标签的href属性// 创建a标签下载图片var addElement = document.createElement("a");addElement.href = fileUrl;addElement.download = "恭顺安康.png";document.body.appendChild(addElement);addElement.click();document.body.removeChild(addElement);});
};
</script><style lang="less" scoped>
.image-box {width: 500px;height: 520px;border: 1px solid #ccc;background-color: aqua;display: flex;justify-content: center;align-items: center;flex-direction: column;font-weight: 700;font-size: 28px;margin-bottom: 10px;.text {color: #fff;margin-bottom: 10px;}.picture {width: 400px;height: 400px;}
}
</style>
效果同上~
拓展
html2canvas主要作用和应用场景?
主要作用
将 HTML 转换为图片
html2canvas 可以将网页中的特定区域或整个页面转换为图片,支持复杂的 CSS 样式(如渐变、阴影、边框等)。
示例:将网页中的某个
<div>
元素转换为图片。生成截图
用于生成网页的截图,用户可以保存或分享这些截图。
示例:生成网页的缩略图或用户自定义内容的截图。
保存网页内容
将网页中的内容保存为图片格式,方便用户下载或分享。
示例:用户点击“保存为图片”按钮,将网页内容保存为 PNG 文件。
实现网页打印功能
将网页内容转换为图片后,可以用于打印或生成 PDF。
示例:将网页中的表格或图表转换为图片并打印。
动态生成图片
结合用户输入或动态数据,实时生成图片。
示例:根据用户输入生成自定义海报或证书。
跨平台兼容
在移动端和桌面端均可使用,支持主流浏览器。
示例:在移动端生成分享图片。
使用场景
网页截图工具
用户可以通过点击按钮将网页内容保存为图片。生成分享图片
在社交媒体分享时,将网页内容转换为图片,方便传播。数据可视化
将图表、地图等可视化内容保存为图片。网页内容存档
将网页内容保存为图片格式,用于存档或备份。自定义海报或证书
根据用户输入动态生成图片,如活动海报、电子证书等。
为什么blob格式的图片会比base64格式的图片兼容性更好一些?
Blob
格式的图片比 Base64
格式的图片兼容性更好,主要是因为它们在存储、传输和处理方式上的差异。以下是具体原因:
1. 文件大小
Blob:Blob 是二进制数据,存储的是文件的原始二进制形式,因此文件大小与原始图片一致,不会额外增加体积。
Base64:Base64 是一种文本编码方式,它将二进制数据转换为 ASCII 字符串,会导致数据体积增加约 33%。这会增加内存占用和传输开销。
兼容性影响:
对于大图片或大量图片,Base64 会增加内存和网络负担,可能导致性能问题,而 Blob 则更高效。
2. 数据传输效率
Blob:Blob 是二进制数据,适合直接用于网络传输(如通过
fetch
或XMLHttpRequest
上传或下载),传输效率高。Base64:Base64 是文本格式,传输时需要额外的编码和解码步骤,效率较低。
兼容性影响:
在网络传输中,Blob 格式更高效,尤其是在移动端或网络环境较差的情况下。
3. 浏览器处理方式
Blob:Blob 是浏览器原生支持的二进制数据格式,可以直接用于图片渲染、文件下载等操作,兼容性更好。
Base64:Base64 需要浏览器额外解码为二进制数据后才能使用,增加了处理步骤。
兼容性影响:
在某些低版本浏览器或特殊环境中,Base64 可能会遇到解码问题,而 Blob 的支持更广泛。
4. 内存占用
Blob:Blob 是二进制数据,存储和渲染时占用的内存较少。
Base64:Base64 是文本格式,存储和渲染时会占用更多内存。
兼容性影响:
对于内存有限的设备(如移动端),Base64 可能导致内存不足或性能下降,而 Blob 更节省资源。
5. URL 使用
Blob:可以通过
URL.createObjectURL(blob)
生成一个临时 URL,直接用于图片渲染或文件下载。Base64:Base64 数据可以直接嵌入到
src
属性中(如data:image/png;base64,...
),但会导致 HTML 或 CSS 文件体积增大。兼容性影响:
Base64 数据嵌入 HTML 或 CSS 中可能会导致文件过大,影响加载速度,而 Blob 的临时 URL 更灵活且高效。
6. 安全性
Blob:Blob 是二进制数据,不易被直接修改或注入恶意代码。
Base64:Base64 是文本格式,容易被篡改或注入恶意内容。
兼容性影响:
在安全性要求较高的场景中,Blob 更可靠。
7. API 支持
Blob:现代浏览器广泛支持 Blob,并且可以与
File
、FileReader
、FormData
等 API 无缝配合。Base64:虽然 Base64 也被广泛支持,但在某些 API 中需要额外处理(如解码)。
兼容性影响:
Blob 更适合与现代 Web API 结合使用,兼容性更好。
总结
特性 | Blob 格式 | Base64 格式 |
---|---|---|
文件大小 | 原始大小,无额外开销 | 增加约 33% 的体积 |
传输效率 | 高效,适合网络传输 | 较低,需要编码和解码 |
内存占用 | 较少 | 较多 |
浏览器支持 | 广泛支持,原生二进制格式 | 需要额外解码 |
URL 使用 | 生成临时 URL,灵活高效 | 直接嵌入 HTML/CSS,可能导致文件过大 |
安全性 | 较高,不易篡改 | 较低,易被篡改 |
API 支持 | 与现代 API 无缝配合 | 需要额外处理 |
因此,Blob 格式的图片在文件大小、传输效率、内存占用、浏览器支持和安全性等方面表现更好,兼容性更强,尤其是在处理大文件或高性能要求的场景中。而 Base64 格式更适合用于小图片或需要直接嵌入文本的场景(如邮件或简单的数据存储)。
相关文章:
WEB前端将指定DOM生成图片并下载最佳实践(html2canvas)
前言: html2canvas 是一个 JavaScript 库,其主要作用是将 HTML 元素或其部分内容渲染为 Canvas 图像。通过它,开发者可以将网页中的任意 DOM 元素(包括文本、图片、样式等)转换为图片格式(如 PNG 或 JPEG&…...
C# 十六进制字符串转换为十进制
在 C# 中,将十六进制(Hexadecimal)字符串转换为十进制(Decimal)整数非常简单。以下是几种常见的方法: 方法 1: 使用 Convert.ToInt32 Convert.ToInt32 方法可以直接将十六进制字符串转换为十进制整数。 示…...
第4章 信息系统架构(三)
4.3 应用架构 应用架构的主要内容是规划出目标应用分层分域架构,根据业务架构规划目标应用域、应用组和目标应用组件,形成目标应用架构逻辑视图和系统视图。从功能视角出发,阐述应用组件各自及应用架构整体上,如何实现组织的高阶…...
Qt 保留小数点 固定长度 QString 格式化
QString的arg()函数格式化输出double类型数值,包括fieldWidth、fmt、prec和fillChar参数的作用。示例代码展示了如何设置精度和填充字符,以及字段宽度的影响。文中提到,当fieldWidth小于实际长度时,前面的填充不会被截断。此外&am…...
亲测可用,IDEA中使用满血版DeepSeek R1!支持深度思考!免费!免配置!
作者:程序员 Hollis 之前介绍过在IDEA中使用DeepSeek的方案,但是很多人表示还是用的不够爽,比如用CodeChat的方案,只支持V3版本,不支持带推理的R1。想要配置R1的话有特别的麻烦。 那么,今天,给…...
AI训练中的常用指令
以下是一些常用于深度学习训练的 Linux 指令,可以帮助你高效管理和执行训练任务: 文件管理 查看当前目录内容:ls进入目录:cd 路径/到/目录创建新目录:mkdir 新目录名称删除文件或目录: 删除文件ÿ…...
汽车同轴供电(PoC)电感器市场报告:未来几年年复合增长率CAGR为14.3%
汽车同轴供电(PoC)系统旨在通过同轴电缆传输电力和数据。 该技术适用于各种汽车应用,如摄像头系统、传感器和其他需要通过单根电缆传输电力和数据的车载设备。 汽车 PoC 系统中的电感器有多种用途,包括能量存储:电感器…...
C++中间件DDS介绍
C DDS 库简介 DDS(Data Distribution Service) 是一种用于实时分布式系统通信的中间件标准,由 OMG(Object Management Group) 提出。它是一种发布/订阅(Publish/Subscribe)模式的数据通信框架&…...
强化学习笔记
强化学习的总体目标:寻找最优策略。 关键名词 智能体(Agent) 状态(State):智能体相对于环境的状态 s ∈ S s∈S s∈S 状态空间(State space):把所有状态放在一起&…...
【个人记录】openEuler安装K3S并配置为GPU节点
前言 国内网络环境特殊,在线安装比较麻烦,K3S采用离线安装方式进行部署。 安装整体思路是: 安装GPU驱动安装CUDA工具安装nvidia容器运行时安装K3S设置K3S使用GPU 基础环境 采用All In One方式(其实只有一张GPU卡)部…...
SpringAI系列 - ToolCalling篇(二) - 如何设置应用侧工具参数ToolContext(有坑)
目录 一、引言二、集成ToolContext示例步骤1: 在`@Tool`标注的工具方法中集成`ToolConext`参数步骤2:`ChatClient`运行时动态设置`ToolContext`参数三、填坑一、引言 在使用AI大模型的工具调用机制时,工具参数都是由大模型解析用户输入上下文获取的,由大模型提供参数给本地…...
Linux系统中常见的词GNU是什么意思?
GNU 是 “GNU’s Not Unix” 的递归缩写,它是一个自由软件项目,旨在创建一个完全自由的操作系统。这个名字反映了GNU项目的核心理念:它试图创建一个类Unix的系统,但不是Unix本身。 GNU 项目由 理查德斯托曼(Richard S…...
Revit API:对元素过滤的三点思考
一、为什么要对元素进行过滤? 提高效率:Revit模型可能包含成千上万的元素,直接对所有元素进行操作会非常耗时。通过过滤,可以只选择需要处理的元素,从而提高代码的执行效率。 精准控制:通过过滤࿰…...
计算机毕业设计Python农产品推荐系统 农产品爬虫 农产品可视化 农产品大数据(源码+LW文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
计算机网络之TCP的可靠传输
上一篇内容可能比较多,显得比较杂乱,这一篇简单总结一下TCP是靠什么实现可靠传输的吧。 校验和 TCP是端到端的传输,由发送方计算校验和,接收方进行验证,目的是为了验证TCP首部和数据在发送过程中没有任何改动&#x…...
linux 驱动编程配置(minis3c2440)
1.介绍 1. 启动过程:启动u-boot------>>启动linux内核----->>挂载根文件系统 2. uboot是一个裸机程序,是一个bootloader,用于启动linux系统以及系统初始化 ubootloader主要完成了哪些任务:1. 初始化异常向量表&a…...
数据库基础1
MySQL在C语言中的操作步骤 C语言操作MySQL的基本流程如下: 引入MySQL头文件初始化MySQL连接连接到MySQL服务器执行SQL语句获取查询结果处理查询结果释放结果集和连接 数据库中有哪些约束规则 1.主键约束 promary key 具有唯一且非空 2.外键约束 foreign key 3.非…...
Redis文档总结
文档:https://redis.com.cn/topics/why-use-redis.html 1.我们为什么一定要用 Redis 呢? 速度快,完全基于内存,使用 C 语言实现,网络层使用 epoll 解决高并发问题,单线程模型避免了不必要的上下文切换及竞争…...
论文笔记(七十二)Reward Centering(二)
Reward Centering(二) 文章概括摘要2 简单的奖励中心 文章概括 引用: article{naik2024reward,title{Reward Centering},author{Naik, Abhishek and Wan, Yi and Tomar, Manan and Sutton, Richard S},journal{arXiv preprint arXiv:2405.0…...
25年2月通信基础知识补充:多普勒频移与多普勒扩展、3GPP TDL信道模型
看文献过程中不断发现有太多不懂的基础知识,故长期更新这类blog不断补充在这过程中学到的知识。由于这些内容与我的研究方向并不一定强相关,故记录不会很深入请见谅。 【通信基础知识补充7】25年2月通信基础知识补充1 一、多普勒频移与多普勒扩展傻傻分不…...
ASUS/华硕无畏16 X1605VA 原厂Win11 22H2系统 工厂文件 带ASUS Recovery恢复
华硕工厂文件恢复系统 ,安装结束后带隐藏分区,带一键恢复,以及机器所有的驱动和软件。 支持型号:X1605VA 系统版本:Windows 11 22H2 文件下载:点击下载 文件格式:工厂文件 安装教程&#x…...
DeepSeek赋能智慧文旅:新一代解决方案,重构文旅发展的底层逻辑
DeepSeek作为一款前沿的人工智能大模型,凭借其强大的多模态理解、知识推理和内容生成能力,正在重构文旅产业的发展逻辑,推动行业从传统的经验驱动向数据驱动、从人力密集型向智能协同型转变。 一、智能服务重构:打造全域感知的智…...
自学FOC系列分享--SVPWM和clark 逆变换及代码实战
自学FOC系列分享--SVPWM和clark 逆变换 1 说在前面2 回顾clarke 和 park的变换和逆变换2.1 概述2.2 公式说明 3 SVPWM是如何写的3.1 简单说明3.2 重要对比 4、代码实战4.1 代码构成说明4.2 全部代码4.3 测试代码4.4 测试结果4.5 结果分析 总结 1 说在前面 如前一篇文章所述的系…...
LeetCode-524. 通过删除字母匹配到字典里最长单词
1、题目描述: 给你一个字符串 s 和一个字符串数组 dictionary ,找出并返回 dictionary 中最长的字符串,该字符串可以通过删除 s 中的某些字符得到。 如果答案不止一个,返回长度最长且字母序最小的字符串。如果答案不存在&#x…...
浅谈网络 | 容器网络之Cilium
目录 Cilium介绍Cilium是什么Cilium 主要功能特性为什么用Cilium? 功能概述组件概况BPF 与 XDPeBPF (Extended Berkeley Packet Filter)XDP (eXpress Data Path) Cilium介绍 Cilium是什么 Cilium 是一个开源网络和安全项目,专为 Kubernetes、Docker 和…...
armv7l
在 **ARMv7l** 中,最后的字符是字母 **“l”**(小写字母 “L”),而不是数字 **“1”**。 --- ### 1. **ARMv7l 的含义** - **ARMv7**:指的是 **ARM 架构的第 7 代版本**,是一种广泛应用于嵌入式系统&…...
从零开始构建一个小型字符级语言模型的完整详细教程(基于Transformer架构)
最近特别火的DeepSeek,是一个大语言模型,那一个模型是如何构建起来的呢?DeepSeek基于Transformer架构,接下来我们也从零开始构建一个基于Transformer架构的小型语言模型,并说明构建的详细步骤及内部组件说明。我们以构建一个字符级语言模型(Char-Level LM)为例,目标是通…...
期权帮|股指期货交割日为啥会大跌?
锦鲤三三每日分享期权知识,帮助期权新手及时有效地掌握即市趋势与新资讯! 股指期货交割日为啥会大跌? 股指期货交割日股市可能会大跌,主要原因有以下几点: 1.交割日时多空双方需要平仓或转仓,若多头急于平仓…...
B树和B+树
1. B树 1.1 定义 B树是一种多路平衡查找树,具有以下性质: 每个节点最多包含 m 个子节点(m 阶 B树)。 根节点至少有两个子节点(除非它是叶子节点)。 每个内部节点(非根和非叶子节点ÿ…...
分布式事务核心理论:CAP与BASE
一、引言:分布式系统的挑战 在互联网应用中,随着业务规模的扩大,单机数据库已无法满足高并发和海量数据存储需求。分布式系统将数据拆分到不同节点,但随之带来了数据一致性的难题。CAP与BASE理论为分布式事务提供了重要的设计指导…...
【UCB CS 61B SP24】Lecture 4 - Lists 2: SLLists学习笔记
本文内容为重写上一节课中的单链表,将其重构成更易于用户使用的链表,实现多种操作链表的方法。 1. 重构单链表SLList 在上一节课中编写的 IntList 类是裸露递归的形式,在 Java 中一般不会这么定义,因为这样用户可能需要非常了解…...
记录一个ES分词器不生效的解决过程
问题背景 商城项目,其中商品查询检索使用的是ES, 但存在某些商品查询不到的问题 例如:某商品名包含AA_BBB这样的关键词,但是搜索"AA"不能查询到该商品,但是将商品名修改为AA BBB后就能查询到了. 怀疑是分词的问题,但看代码,在创建ES索引时在对应字段上也定义了分词器…...
Jeecg+vue3去掉JInput组件默认模糊查询的配置方式
遇见的问题:input查询带**号 情况1、使用schemas配置的表单项 添加type""属性,默认type为like,去掉模糊则配置为空 文档链接 jeecg文档说明JInput 2、直接调用组件则在属性上直接添加type""属性...
Could not initialize class io.netty.util.internal.Platfor...
异常信息: Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class io.netty.util.internal.PlatformDependent0 Caused by: java.lang.ExceptionInInitializerError: Exception java.lang.reflect.InaccessibleObjec…...
什么是业务流程分类框架
业务流程分类框架是一个用于组织和系统化地分类业务流程的结构化方法。它旨在帮助企业理解、管理、分析和改进其运营流程。 可以把它想象成一个图书馆的图书分类系统,帮助快速找到和理解不同类型的书籍。对于业务流程来说,分类框架帮助快速了解不同类型的…...
向量的点乘的几何意义
源自AI 向量的点乘(Dot Product)在几何和图形学中有重要的意义。它不仅是数学运算,还可以用来描述向量之间的关系。以下是点乘的几何意义及其应用: 1. 点乘的定义 对于两个向量 a 和 b,它们的点乘定义为:…...
达梦数据库应用开发_JDBC接口介绍_yxy
达梦数据库应用开发_JDBC接口介绍 1 JDBC是什么?2 JDBC主要类或接口介绍2.1 建立与 DM 数据库的连接2.2 转接发送 SQL 语句到数据库2.3 处理并返回语句执行结果 3 JDBC基本使用3.1 前期准备3.2 增删改查代码示例3.3 绑定变量操作示例3.4 大字段操作示例 1 JDBC是什么…...
在ubuntu上用Python的openpyxl模块操作Excel的案例
文章目录 安装模块读取Excel数据库取数匹配数据和更新Excel数据 在Ubuntu系统的环境下基本职能借助Python的openpyxl模块实现对Excel数据的操作。 安装模块 本次需要用到的模块需要提前安装(如果没有的话) pip3 install openpyxl pip3 install pymysql在操作前,需…...
RabbitMQ介绍以及基本使用
文章目录 一、什么是消息队列? 二、消息队列的作用(优点) 1、解耦 2、流量削峰 3、异步 4、顺序性 三、RabbitMQ基本结构 四、RabbitMQ队列模式 1、简单队列模式 2、工作队列模式 3、发布/订阅模式 4、路由模式 5、主题模式 6、…...
搭建 Hadoop 3.3.6 伪分布式
搭建 Hadoop 3.3.6 伪分布式 IP 192.168.157.132 初始化操作 更改yum源 # 1_1.安装Wget yum install wget# 1_2.备份CentOS-Base.repo文件 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_bak# 2.下载阿里yum源配置 wget -O /etc/yum.repos.d/Cen…...
进程控制(靠原语实现)
什么是进程控制? 进程控制的主要功能是:对系统中的所有进程实施有效管理,它具有创建新进程、撤销已有进程、实现进程状态转换等功能。 简化理解:进程控制就是要实现进程状态转换。 知识一览: 如何实现进程控制&#…...
linux5-多任务--进程fork()
一.多任务:让系统具备同时处理多个任务的能力 1.如何实现多任务 1.1进程:操作系统上正在运行的程序,需要消耗内存和CPU 1.1.1 进程的生存周期:创建、调度、消亡 1.1.1.1进程的创建:每个进程被创建时,操作…...
【蓝桥】二分法
1、简介 1.1 定义: 通过将问题的搜索范围一分为二,迭代地缩小搜索范围,直到找到目标或确定目标不存在 1.2 适用: 有序数据集合,且每次迭代可以将搜索范围缩小一半 1.3 本质: 枚举:利用数据结构…...
linux查看程序占用的本地端口
ss是Socket Statistics的缩写,用来替代旧的netstat工具,功能更强大,执行更快。它用于查看系统的网络连接情况,包括TCP、UDP等协议的信息。 一. 命令解析: sudo ss -tulwnpss (Socket Statistics):替代 ne…...
统计函数运行时间的python脚本
这是一个统计函数运行时间的实用脚本,其中用到了函数的嵌套、链式传输参数,以及修饰器。 import time# 定义一个装饰器timer,用于计算被装饰函数的运行时间 def timer(func):print("执行了timer")def wrapper(*args, **kwargs):st…...
百度搜索和文心智能体接入DeepSeek满血版——AI搜索的新纪元
在当今数字化时代,搜索引擎作为互联网信息获取的核心工具,正经历着前所未有的变革。据悉,2025年2月16日,百度搜索和文心智能体平台宣布全面接入DeepSeek和文心大模型的最新深度搜索功能,搜索用户可免费使用DeepSeek和文…...
快速入门Springboot+vue——MybatisPlus快速上手
学习自哔哩哔哩上的“刘老师教编程”,具体学习的网站为:6.MybatisPlus快速上手_哔哩哔哩_bilibili,以下是看课后做的笔记,仅供参考。 第一节 ORM介绍 ORM对象关系映射,为了解决面向对象与关系数据库存在的互补匹配现象…...
在C#中动态访问对象属性时,用表达式树可以获得高效性能
在C#中如何用表达式树动态访问对象属性的问题。用户可能已经知道反射的基本用法,但想用表达式树来提高性能,因为表达式树编译后的委托执行速度比反射快。 首先,表达式树的基本概念。表达式树允许在运行时构建代码,并编译成可执行的…...
性能:React 实战优化技巧 之 函数闭包
子组件使用了 React.memo ,为什么 “prop 值未发生改变”,子组件依然被重新渲染了? 🚧 示例:点击子组件中按钮,获取 input 数据进行提交(常见于表单) index.tsx import Author f…...
蓝桥杯学习大纲
(致酷德与热爱算法、编程的小伙伴们) 在查阅了相当多的资料后,发现没有那篇博客、文章很符合我们备战蓝桥杯的学习路径。所以,干脆自己整理一篇,欢迎大家补充! 一、蓝桥必备高频考点 我们以此为重点学习…...