react18+ts如何生成二维码并且下载

目录

一、下载qrcode.react

二、引入qrcode.react

三 、编写下载二维码的函数


在react开发中如果需要二维码,笔者选择使用qrcode.react来快速生成。

一、下载qrcode.react

pnpm add qrcode.react

二、引入qrcode.react

import {Box,Stack,Fab} from '@mui/material';
import { QRCodeCanvas } from 'qrcode.react';
import { useState} from "react";
export const Component = () => {const currentUrl = window.location.protocol + '//' + window.location.host;console.log('🚀 ~ file: Receive.tsx:33 ~ Component ~ currentUrl:', currentUrl);const [qrValue, setQrValue] = useState(currentUrl);return (<Box><Stack direction="row" justifyContent="center" alignItems="center" mb={3}><Box><QRCodeCanvasid="qrCode"value={qrValue}size={128}imageSettings={{excavate: true,src: '/logo-128.png',width: 30,height: 30}}/></Box></Stack></Box>);
};Component.displayName = 'ReceivePage';

 qrcode.react具体配置参数请参考官网qrcode.react

三 、编写下载二维码的函数

 //base64转文件const dataURLtoBlob = (dataurl: string) => {const arr = dataurl.split(',') as any;const mime = arr[0].match(/:(.*?);/)[1];const bstr = atob(arr[1]);let n = bstr.length;const u8arr = new Uint8Array(n);while (n--) {u8arr[n] = bstr.charCodeAt(n);}return new Blob([u8arr], { type: mime });};//创建a标签用于下载const downloadFile = (url: string, name: string) => {const a = document.createElement('a');a.setAttribute('href', url);a.setAttribute('download', name);a.setAttribute('target', '_blank');a.dispatchEvent(new MouseEvent('click'));  //模拟点击/*    const clickEvent = document.createEvent('MouseEvents');clickEvent.initEvent('click', true, true); //模拟点击,initEvent(方法已经弃用)a.dispatchEvent(clickEvent); */};
//下载二维码const handleDownLoadQRCode = () => {//先获取要下载的二维码const Qr = document.getElementById('qrCode') as any;//把canvas的数据改成base64的格式const canvasUrl = Qr!.toDataURL('image/png');const myBlob = dataURLtoBlob(canvasUrl);const myUrl = URL.createObjectURL(myBlob); // 创建blob下载地址downloadFile(myUrl, 'qrCode');};

最后附上完整代码:

import { Box, Stack, Fab } from '@mui/material';
import { QRCodeCanvas } from 'qrcode.react';
import { useState } from 'react';
export const Component = () => {const currentUrl = window.location.protocol + '//' + window.location.host;console.log('🚀 ~ file: Receive.tsx:33 ~ Component ~ currentUrl:', currentUrl);const [qrValue, setQrValue] = useState(currentUrl);//base64转文件const dataURLtoBlob = (dataurl: string) => {const arr = dataurl.split(',') as any;const mime = arr[0].match(/:(.*?);/)[1];const bstr = atob(arr[1]);let n = bstr.length;const u8arr = new Uint8Array(n);while (n--) {u8arr[n] = bstr.charCodeAt(n);}return new Blob([u8arr], { type: mime });};//创建a标签用于下载const downloadFile = (url: string, name: string) => {const a = document.createElement('a');a.setAttribute('href', url);a.setAttribute('download', name);a.setAttribute('target', '_blank');a.dispatchEvent(new MouseEvent('click')); //模拟点击/*    const clickEvent = document.createEvent('MouseEvents');clickEvent.initEvent('click', true, true); //模拟点击,initEvent(方法已经弃用)a.dispatchEvent(clickEvent); */};//下载二维码const handleDownLoadQRCode = () => {//先获取要下载的二维码const Qr = document.getElementById('qrCode') as any;//把canvas的数据改成base64的格式const canvasUrl = Qr!.toDataURL('image/png');const myBlob = dataURLtoBlob(canvasUrl);const myUrl = URL.createObjectURL(myBlob); // 创建blob下载地址downloadFile(myUrl, 'qrCode');};return (<Box><Stack direction="row" justifyContent="center" alignItems="center" mb={3}><Box><QRCodeCanvasid="qrCode"value={qrValue}size={128}imageSettings={{excavate: true,src: '/logo-128.png',width: 30,height: 30}}/></Box></Stack><Stack direction="row" justifyContent="space-around"><Fab color="primary" variant="extended" size="small" onClick={handleDownLoadQRCode}>点击下载二维码</Fab></Stack></Box>);
};Component.displayName = 'ReceivePage';

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/10088.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【基础算法总结】二分查找一

二分查找一 1. 二分查找2.在排序数组中查找元素的第一个和最后一个位置3.x 的平方根4.搜索插入位置 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1…

spring boot 线程池

文章目录 引言I 配置线程池II 封装线程池任务执行器2.1 唯一性标识2.2 LogFilter:设置request_id2.3 logback使用request_idIII 检测线程池引言 SpringBootApplication启动类上需要加入注解@EnableAsync或者在配置类上使用 应用场景:封装线程池任务执行器:在任务提交时,会…

制造业数字化转型解决方案及应用(125页PPT)

一、资料介绍 《制造业数字化转型解决方案及应用》是一份内容丰富、深入剖析制造业数字化转型的125页PPT资料。这份资料以“智能制造、制造业数字化转型、制造业数字化转型案例”为关键词&#xff0c;全面展现了制造业数字化转型的核心理念、解决方案以及实际应用案例。 关注…

【JS红宝书学习笔记】第1、2章

第1章 什么是JavaScript JavaScript 是一门用来与网页交互的脚本语言&#xff0c;包含以下三个组成部分。 ECMAScript&#xff1a;由 ECMA-262 定义并提供核心功能。文档对象模型&#xff08;DOM&#xff09;&#xff1a;提供与网页内容交互的方法和接口。浏览器对象模型&…

块元素、内联元素、行内块元素

一、介绍&#xff1a; CSS元素划分成块元素、行内元素&#xff08;内联元素&#xff09;、行内块元素等多种常用类型。也就是说&#xff1a;在CSS中&#xff0c;元素根据其在页面上的布局方式被分为不同的显示类型。 背景&#xff1a;HTML负责定义网页的结构和内容&#xff0c…

OC foudation框架(上)学习

foundation框架 文章目录 foundation框架字符串&#xff08;NSString && NSMutableString&#xff09;NSString的其他功能NSMutableString 日期与时间 &#xff08;NSDate&#xff09;2.1 日期与时间&#xff08;NSDate&#xff09;2.2日期格式器日历与日期组件定时器&…

Java入门基础学习笔记8——注释

1、注释&#xff1a; 注释是写在程序中对代码进行解释说明的文件&#xff0c;方便自己和其他人查看&#xff0c;以便理解程序的。 package cn.ensource.note;/**文档注释文档注释 */ public class NoteDemo {public static void main(String[] args) {// 单行注释System.out.…

word转pdf的java实现(documents4j)

一、多余的话 java实现word转pdf可用的jar包不多&#xff0c;很多都是收费的。最近发现com.documents4j挺好用的&#xff0c;它支持在本机转换&#xff0c;也支持远程服务转换。但它依赖于微软的office。电脑需要安装office才能转换。鉴于没在linux中使用office&#xff0c;本…

SwiftUI 调整视图内容周围间隙(Content Margins)的“时髦”方法

概述 在 SwiftUI 开发的应用中,往往在小屏设备(比如 iPhone)上布局良好的 App 放到大屏(iPad)上后就会“一塌糊涂”。因为它们一味的只想着“占据”却不知道“舍弃”。 从 iOS 17.0(iPad 17.0)开始苹果提供了原生的视图修改器方法专注于处理此事。 在本篇博文中,您将…

Python实战开发及案例分析(17)—— 粒子群算法

粒子群优化&#xff08;Particle Swarm Optimization, PSO&#xff09;是一种计算方法&#xff0c;它通过模拟鸟群的社会行为来解决优化问题。粒子群优化算法中的每个“粒子”代表问题空间中的一个候选解决方案。每个粒子都会根据自己的经验以及邻居的经验来调整其在解空间中的…

windows轻松管理nodejs 版本 升/降级 卸载等等

#nvm-windows 管理nodejs 版本神器# 不经意升级了node版本导致原有项目启动异常, 看到了node版本管理神器:nvm-windos 1,先下载 nvm >> git 选择如下安装包或 nvm-setup.exe文件 https://github.com/coreybutler/nvm-windows/releases/tag/1.1.12 2. 双击安装,下一…

centos追加扩容整块磁盘容量

centos追加扩容整块磁盘容量 原磁盘/dev/vdb有100G&#xff0c;整块直接挂载到了/data目录下后来追加了200G到/dev/vdb上[rooti-QxxV9WFa3-2 ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sr0 11:0 1 386K 0 rom vda 253:0 0 100G 0 disk └─vda1…

如何在本地调试THUDM/chatglm2-6b大模型

模型下载网站&#xff1a;https://www.opencsg.com/models 安装git&#xff1a; sudo apt install git安装git-lfs&#xff0c;这个很重要。 sudo apt-get install git-lfs下载模型&#xff1a;THUDM/chatglm2-6b mkdir THUDM cd THUDMgit lfs intsall git clone https://p…

Win10 WSL2 Ubuntu 22.04 配置深度学习环境

文章目录 WSL安装Anaconda下载Anaconda安装包安装配置conda命令conda换国内源conda初始化shell环境conda init手动源激活脚本&#xff1a; 安装Windows上的NVIDIA GPU驱动WSL安装CUDA Toolkit安装12.1版本环境配置报错1报错2 内存不足导致安装崩溃问题描述问题分析问题解决 WSL…

用docker 搭建 vscode for web

前言: 每当我们换机子或者是电脑内容不够的时候&#xff0c;总想着能用web方式使用某些软件&#xff0c;这样子&#xff0c;你无论何时何地都能愉快的开发了&#xff0c;今天来安排下使用容器技术去搭建vscode。 查找合适的Docker镜像 你可以使用官方的Code Server Docker镜像…

vue2人力资源项目6角色管理

elementUi编写表格样式及分页组件 <template><div class"container"><div class"app-container"><!--角色管理内容--><div class"role-operate"><el-button type"primary">添加角色</el-butt…

并行执行参数的应用技巧——《OceanBase 并行执行》系列 5

OceanBase 提供了一套参数&#xff0c;实现对并行执行功能的初始化和调优。 在OceanBase 的启动过程中&#xff0c;系统会根据租户的 CPU 数量和特定的配置项 px_workers_per_cpu_quota 来自动计算出默认的并行执行控制参数。当然&#xff0c;用户也可以选择不采用这些默认值…

一键开启,盲盒小程序里的梦幻奇遇

在这个充满惊喜与未知的数字时代&#xff0c;盲盒小程序以其独特的魅力成为了许多人的新宠。只需一键开启&#xff0c;你就能踏入一个充满梦幻奇遇的世界&#xff0c;探索未知的惊喜与乐趣。 盲盒小程序不仅仅是一个简单的购物平台&#xff0c;它更是一个充满神秘与惊喜的宝藏库…

ETL中如何执行Python脚本

Python的解读 Python 是一种高级、通用的编程语言&#xff0c;由荷兰程序员吉多范罗苏姆&#xff08;Guido van Rossum&#xff09;于1990年代初设计并发布。Python的设计哲学强调代码的可读性和简洁性&#xff0c;它的语法清晰且表达力强&#xff0c;使得开发者能够以更少的代…

GT2512-STBA 三菱触摸屏12.1寸型

T2512-STBA参数说明&#xff1a;12.1"、SVGA 800*600、65536色、TFT彩色液晶显示屏、AC电源、32MB内存 三菱触摸屏GT2512-STBA性能规格详细说明&#xff1a; [显示部] 显示软元件&#xff1a;TFT彩色液晶显示屏 画面尺寸&#xff1a;12.1寸 分辨率&#xff1a;SVGA 80…