React+TS前臺項目實戰(二十四)-- 繪制組件Qrcode封裝

文章目錄

  • 前言
  • Qrcode組件
    • 1. 功能分析
    • 2. 代碼+詳細注釋
    • 3. 使用方式
    • 4. 效果展示(pc端 / 移動端)
  • 總結


前言

今天要封裝的Qrcode 組件,是通過傳入的信息,繪制在二維碼上,可用于很多場景,如區塊鏈項目中的區塊顯示交易地址時就可以用到。

Qrcode組件

1. 功能分析

(1)通過傳入text屬性,表示要繪制的信息
(2)使用useEffect,監聽數據,當發生變化時重新繪制二維碼
(3)支持傳入 className 自定義類名來修改樣式

2. 代碼+詳細注釋

// @/components/Qrcode/index.tsx
import { useEffect, useRef, FC } from "react";
import QRCode from "qrcode";
import { ReactComponent as QrCodeIcon } from "./assets/qrcode.svg";
import { QrcodeContainer } from "./styled";
import classNames from "classnames";// 組件的屬性類型
type Props = {text: string; // 要繪制的二維碼內容className?: string; // 自定義的類名
};const Qrcode: FC<Props> = ({ text, className }) => {const qrRef = useRef<HTMLCanvasElement | null>(null);useEffect(() => {// 獲取canvas元素refconst cvs = qrRef.current;// 如果沒有 canvas 元素的引用,則直接返回if (!cvs) return;// 調用 QRCode.toCanvas 方法,將text繪制到canvas上QRCode.toCanvas(cvs,text,{margin: 5, // 設置二維碼周圍的邊距errorCorrectionLevel: "H", // 設置二維碼的容錯級別width: 144, // 設置二維碼的寬度},(err) => {if (err) {console.error(err);}});}, [qrRef, text]); // 監聽qrRef和text,當發生變化時重新繪制二維碼return (<QrcodeContainer className={classNames(className)}><label><QrCodeIcon /></label><canvas ref={qrRef} className={classNames("qrcode")} /></QrcodeContainer>);
};export default Qrcode;
------------------------------------------------------------------------------
// @/components/Qrcode/styled.tsx
import styled from "styled-components";
import variables from "@/styles/variables.module.scss";
export const QrcodeContainer = styled.div`width: 100%;position: relative;cursor: pointer;label {display: flex;align-items: center;cursor: pointer;}.qrcode {top: calc(100% + 10px);box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);}&::after {top: calc(100% - 15px);content: "";width: 5px;height: 5px;border: 10px solid transparent;border-bottom: 10px solid #fff;filter: drop-shadow(0 -5px 5px rgb(0, 0, 0, 0.1));}.qrcode,&::after {display: none;position: absolute;left: 50%;transform: translateX(-50%);}&:hover,&:focus-within {.qrcode,&::after {display: block;}}@media (max-width: ${variables.mobileBreakPoint}) {.qrcode,&::after {left: 0;}}
`;

3. 使用方式

// 引入組件
import Qrcode from "@/components/Qrcode";
// 使用
const address = "http://test-address?block=XXXX"
<Qrcode text={ address } />

4. 效果展示(pc端 / 移動端)

在這里插入圖片描述
在這里插入圖片描述


總結

下一篇講【全局常用組件Echarts封裝】。關注本欄目,將實時更新。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/39684.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/39684.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/39684.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

無人值守停車場管理系統具備哪些功能?無人值守收費停車場系統多少錢

隨著城市化進程的加快&#xff0c;停車難已成為制約城市發展的一個突出問題。在傳統停車場管理中&#xff0c;人工收費、車輛登記等環節不僅效率低下&#xff0c;而且容易出錯。無人值守停車系統的出現&#xff0c;無人值守停車場系統以其高效、智能的特點&#xff0c;通過集成…

Meta 3D Gen:文生 3D 模型

是由 Meta 公布的一個利用 Meta AssetGen&#xff08;模型生成&#xff09;和 TextureGen&#xff08;貼圖材質生成&#xff09;的組合 AI 系統&#xff0c;可以在分分鐘內生成高質量 3D 模型和高分辨率貼圖紋理。 視頻演示的效果非常好&#xff0c;目前只有論文&#xff0c;期…

telegram mini app和game實現登錄功能

接上一篇文章&#xff0c;我們在創建好telegram機器人后&#xff0c;開始開發小游戲或者mini App&#xff0c;那就避免不了登錄功能。 公開鏈接 bot設置教程:https://lengmo714.top/6e79860b.html 參考教程參考教程,telegram已經給我們提供非常多的api&#xff0c;我們在獲取用…

package.json配置詳解

package.json文件 執行 npm init 命令&#xff0c;會在當前目錄生成一個 package.json 文件 這個文檔是你需要知道的關于你的 package.json 文件中需要什么的所有信息。它必須是實際的 JSON&#xff0c;而不僅僅是一個 JavaScript 對象文字。 //package.json {//如果你打算發…

使用vue動態給同一個a標簽添加內容 并給a標簽設置hover,懸浮文字變色,結果鼠標懸浮有的字上面不變色

如果Vue的虛擬DOM更新機制導致樣式更新不及時&#xff0c;你可以嘗試以下幾種方法來解決這個問題&#xff1a; 確保使用響應式數據&#xff1a; 確保你使用的數據是響應式的&#xff0c;并且任何對這些數據的更改都會觸發視圖的更新。在Vue中&#xff0c;你應該使用data對象中的…

多源BFS——AcWing 173. 矩陣距離

多源BFS 定義 多源BFS&#xff08;多源廣度優先搜索&#xff09;是一種圖遍歷算法&#xff0c;它是標準BFS&#xff08;廣度優先搜索&#xff09;的擴展&#xff0c;主要用于解決具有多個起始節點的最短路徑問題。在多源BFS中&#xff0c;不是從單一源點開始搜索整個圖&#…

怎么把webp格式轉換成jpg?5個圖片格式轉換方法全面解析(2024最新)

webp 圖片常用于網站&#xff0c;可顯著改善頁面的瀏覽和加載體驗。然而&#xff0c;許多設備&#xff08;如蘋果手機設備、安卓手機等&#xff09;不支持webp文件。在這些設備上查看webp文件時&#xff0c;最佳做法是將其轉換為其他常見格式&#xff0c;如jpg或 png。Windows電…

LeetCode 69. x 的平方根

更多題解盡在 https://sugar.matrixlab.dev/algorithm 每日更新。 組隊打卡&#xff0c;更多解法等你一起來參與哦&#xff01; LeetCode 69. x 的平方根 &#xff0c;難度簡單。 暴力 解題思路&#xff1a;直接遍歷平方 i&#xff0c; 判斷 x 是否滿足 i 2 ≤ x < ( i …

2024上海大學生程序設計競賽I-六元組計數原根知識詳解

以前基本沒有了解原根相關的一塊內容&#xff0c;最近正好碰到了這個題&#xff0c;于是寫一篇博客記錄一下。 這道題的總體思路就是比較明顯&#xff0c;就是先算出 a p x a^px apx對于每個 x x x的解的個數&#xff0c;然后NTT算一下即可。 先來講一下怎么求歐拉函數 ? ( …

前端FCP指標優化

優化前 第三方依賴按需引入之后&#xff0c;打包的總體積減小到初始值的55%&#xff0c;但是依然存在很大的js文件&#xff0c;需要繼續優化 chunk-vendors.js進行分包之后 截圖 compression-webpack-plugin壓縮之后 截圖

簡單制作基礎的Python鏡像

拉取基礎鏡像 以Ubuntu24示例 docker pull ubuntu:24.04 啟動 docker run -it -d --name ubuntu24 ubuntu:24.04 進入docker docker exec -it ubuntu24 /bin/bash 更新依賴 apt update apt full-upgrade 安裝pip 會自動安裝python3.11.7 apt install pip 支持中文…

55、Flink 中使用 Java Lambda 表達式詳解

1&#xff09;概述 1.注意 Flink 支持對 Java API 的所有算子使用 Lambda 表達式&#xff0c;但是&#xff0c;當 Lambda 表達式使用 Java 泛型時&#xff0c;需要 顯式 地聲明類型信息。 2.示例和限制 示例&#xff1a; map() 函數使用 Lambda 表達式計算輸入值的平方。 …

大學新生人工智能學習路線規劃

1. 引言 七月來臨&#xff0c;各省高考分數已揭榜完成。而高考的完結并不意味著學習的結束&#xff0c;而是新旅程的開始。對于有志于踏入IT領域的高考少年們&#xff0c;這個假期是開啟探索IT世界的絕佳時機。作為該領域的前行者和經驗前輩&#xff0c;我愿意為準新生們提供一…

基于Hadoop平臺的電信客服數據的處理與分析③項目開發:搭建基于Hadoop的全分布式集群---任務10:Hive安裝部署

任務描述 任務內容為安裝并配置在Hadoop集群中使用Hive。 任務指導 Hive是一個基于Hadoop的數據倉庫框架&#xff0c;在實際使用時需要將元數據存儲在數據庫中 具體安裝步驟如下&#xff1a; 1. 安裝MySQL數據庫&#xff08;已安裝&#xff09; 2. 解壓縮Hive的壓縮包 3…

剪映 v5.5 Pro Vip解鎖版:使用指南與注意事項

摘要&#xff1a;本文介紹了剪映Pro VIP解鎖版的使用方法&#xff0c;包括安裝、測試和使用VIP素材的步驟&#xff0c;以及如何避免誤報和保持解鎖狀態的建議。 正文&#xff1a; 剪映Pro是一款廣受歡迎的視頻編輯軟件&#xff0c;提供了豐富的視頻編輯功能和大量高質量的素材…

發送微信消息和文件

參考&#xff1a;https://www.bilibili.com/video/BV1S84y1m7xd 安裝&#xff1a; pip install PyOfficeRobotimport PyOfficeRobotPyOfficeRobot.chat.send_message(who"文件傳輸助手", message"你好&#xff0c;我是PyOfficeRobot&#xff0c;有什么可以幫助…

RabbitMQ中java實現隊列和交換機的聲明

java實現隊列和交換機的聲明 在之前我們都是基于RabbitMQ控制臺來創建隊列、交換機。但是在實際開發時&#xff0c;隊列和交換機是程序員定義的&#xff0c;將來項目上線&#xff0c;又要交給運維去創建。那么程序員就需要把程序中運行的所有隊列和交換機都寫下來&#xff0c;…

【PYG】 PyTorch中size方法和屬性

在 PyTorch 中&#xff0c;size 方法和屬性用于獲取張量的維度信息。下面是它們的用法和區別&#xff1a; node_features.size&#xff1a; 這是一個屬性&#xff08;attribute &#xff09;&#xff0c;返回一個 torch.Size 對象&#xff0c;表示張量的維度。這是不可調用的&a…

用MySQL+node+vue做一個學生信息管理系統(一):配置項目

先用npm init -y生成配置文件 在項目下新建src文件夾&#xff0c;app.js文件。src目錄用來放靜態資源文件&#xff0c;app.js是服務器文件&#xff0c;index.js是vue的入口文件 使用npm install express下載express框架 在app.js文件夾開啟node服務&#xff0c;監聽的端口為…

C++ //練習 14.29 為什么不定義const版本的遞增和遞減運算符?

C Primer&#xff08;第5版&#xff09; 練習 14.29 練習 14.29 為什么不定義const版本的遞增和遞減運算符&#xff1f; 環境&#xff1a;Linux Ubuntu&#xff08;云服務器&#xff09; 工具&#xff1a;vim 解釋&#xff1a; 遞增和遞減要改變對象本身&#xff0c;const類…