精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何使用React創建QR code生成器

譯文 精選
開發 前端
在本教程中,你將學習如何使用JavaScript庫React創建二維碼。React為開發人員提供了重用組件的方式,使得構建前端應用程序變得輕而易舉。

?譯者 | 趙青窕

審校 | 孫淑娟

創建二維碼生成器(Quick Response Code Generator)就是將圖像格式轉換為文本格式進行轉換。二維碼(QR code)是利用圖像數據來代表文本信息,它有很多應用場景,如餐廳菜單,音樂會門票,在線日歷邀請、支付等場景。

在本教程中,你將學習如何使用JavaScript庫React創建二維碼。React為開發人員提供了重用組件的方式,使得構建前端應用程序變得輕而易舉。

1、前提條件

要充分理解本文,你需要具備以下知識和環境:

  • 了解React.js基本內容
  • 你的環境需要滿足Node >= 14.0.0,npm >= 5.6

2、準備工作

首先,打開終端并運行以下命令:

npx create-react-app qrcode-generator

上面的命令附帶了必要的文件,并安裝了創建React應用程序所需的軟件包。

接下來,使用下面的命令切換到自己構建的項目目錄下,并運行開發服務器(Development Server),從而可以訪問http://localhost:3000,以瀏覽器的形式預覽應用。

cd qrcode-generator

npm start

最后,讓我們使用下面的命令安裝創建二維碼生成器所需的依賴庫:

npm install qrcode.react

qrcode.react:一個React組件,用于生成二維碼,并將其呈現給DOM。

3、創建二維碼生成器

二維碼生成器的創建將從創建包含二維碼結構的文件和組件開始。在src目錄中,創建一個名為components的文件夾,并在文件夾中創建一個名為QrCode.js的文件。下面是對應的代碼實現方式:

// src/components/QrCode.js

import { useState } from "react";
import { QRCodeCanvas } from "qrcode.react";

const QrCode = () => {
const [url, setUrl] = useState("");

const downloadQRCode = (e) => {
e.preventDefault();
setUrl("");
};

const qrCodeEncoder = (e) => {
setUrl(e.target.value);
};

const qrcode = (
<QRCodeCanvas
id="qrCode"
value={url}
size={300}
bgColor={"#00ff00"}
level={"H"}
/>
);
return (
<div className="qrcode__container">
<div>{qrcode}</div>
<div className="input__group">
<form notallow={downloadQRCode}>
<label>Enter URL</label>
<input
type="text"
value={url}
notallow={qrCodeEncoder}
placeholder="https://hackernoon.com"
/>
<button type="submit" disabled={!url}>
Download QR code
</button>
</form>
</div>
</div>
);
};

export default QrCode;

上面的代碼片段做了如下操作:

  • Import useState用于聲明變量的初始狀態,url設置為空字符串, setState函數和setUrl用于更新狀態;
  • 庫qrcode.react用于呈現生成的二維碼;
  • 接下來,使用from element中,附加到onSubmit方法中的downloadQRCode函數,該過程由submit事件觸發;
  • 在input元素中,帶有函數' qrCodeEncoder '的onChange事件處理程序用來接收用戶的輸入,并根據獲取的輸入值更改二維碼;
  • 創建一個變量qrcode。它接受QRCodeCanvas組件,并傳遞一些可用的自定義屬性,使二維碼可以在瀏覽器上顯示出來。
  • 最后,button元素將被禁用,直到接收到用戶輸入數據。

4、設計二維碼應用程序

在src文件夾中,創建樣式表(stylessheet)styles.css,該部分負責應用程序的顯示效果, 下面是對應的代碼實現方式:

/* src/styles.css */
*,
*:before,
*:after {
margin: 0;
padding: 0;
box-sizing: border-box;
}
:root {
--font-color: 230 35% 7%;
}
body {
color: hsl(var(--font-color));
}
img {
max-width: 100%;
display: block;
}
.section {
padding: 2em 0;
display: flex;
min-height: 100vh;
align-items: center;
}
.container {
margin-inline: auto;
max-width: 75rem;
width: 85%;
}
.input__group {
display: flex;
margin-top: 2em;
}
input {
width: 100%;
padding: 1em 0.75em;
border: 1px solid #444343;
border-radius: 3px;
margin-bottom: 2em;
margin-top: 0.75em;
}
button {
border: unset;
background: hsl(231, 77%, 90%);
padding: 1em 0.75em;
color: hsl(var(--font-color));
cursor: pointer;
text-transform: uppercase;
font-weight: bold;
}
@media screen and (min-width: 768px) {
.section {
padding: 0;
}
input {
margin: 0;
}
.qrcode__container {
display: flex;
align-items: center;
}
.input__group {
margin-left: 3em;
}
input {
margin-bottom: 2em;
margin-top: 0.75em;
font-size: 1rem;
}
}

接下來,在app的入口app .js中導入QrCode.js文件和樣式表:

// src/App.js

import QrCode from "./components/QrCode";
import "./styles.css";

export default function App() {
return (
<div className="section container">
<QrCode />
</div>
);
}

完成上面步驟后,app顯示如下圖所示:

圖片

5、下載生成的二維碼

用戶可以選擇下載生成的二維碼,使得它可以應用在各種各樣的用例中。從打二維碼的打印到將其嵌入網站,這樣的例子不勝枚舉。

回到components/QrCode.js文件,讓我們更新代碼庫,以使用refs來訪問文檔對象模型節點(DOM Node)。

// src/components/QrCode.js

import { useState, useRef } from "react";
// other import

const QrCode = () => {
const [url, setUrl] = useState("");
const qrRef = useRef(); // include this: call the useRef function
...
const qrcode = (
<QRCodeCanvas
id="qrCode"
value={url}
size={300}
bgColor={"#00ff00"}
level={"H"}
/>
);
return (
<div className="qrcode__container">
<div ref={qrRef}>{qrcode}</div> {/* include this */}
{/* form input container */}
</div>
);
};

export default QrCode;

現在,讓我們更新QrCode.js文件中的downloadQRCode函數,以便能夠單擊下載二維碼按鈕并將下載后的文件保存為圖像文件。

// src/components/QrCode.js

// imports

const QrCode = () => {
// state
// useRef
const downloadQRCode = (e) => {
e.preventDefault();
let canvas = qrRef.current.querySelector("canvas");
let image = canvas.toDataURL("image/png");
let anchor = document.createElement("a");
anchor.href = image;
anchor.download = `qr-code.png`;
document.body.appendChild(anchor);
anchor.click();
document.body.removeChild(anchor);
setUrl("");
};
...
return (
<div className="qrcode__container">
<div ref={qrRef}>{qrcode}</div>
{/* form input container */}
</div>
);
};

export default QrCode;

在downloadQRCode函數中,主要完成了以下任務:

  • 它使用ref對象的.current屬性來獲取當前值,以便知道節點何時發生變化;
  • 利用qrcode.react組件在DOM中生成canvas元素,可以動態創建內容;
  • canvas被追加到toDataURL方法中,且指定器類型為文件格式image/png;
  • 接下來,創建錨元素(Anchor Element),并將href設置為單擊按鈕時下載二維碼的圖像;
  • anchor被附加到文檔主體,一旦二維碼下載后,它就會被刪除;
  • 最后,使用setUrl變量更新狀態url,該操作在執行submit后會清除二維碼對應的輸入。

最后的完整代碼如下:

import { useState, useRef } from "react";
import { QRCodeCanvas } from "qrcode.react";

const QrCode = () => {
const [url, setUrl] = useState("");
const qrRef = useRef();
const downloadQRCode = (e) => {
e.preventDefault();
let canvas = qrRef.current.querySelector("canvas");
let image = canvas.toDataURL("image/png");
let anchor = document.createElement("a");
anchor.href = image;
anchor.download = `qr-code.png`;
document.body.appendChild(anchor);
anchor.click();
document.body.removeChild(anchor);
setUrl("");
};
const qrCodeEncoder = (e) => {
setUrl(e.target.value);
};

const qrcode = (
<QRCodeCanvas
id="qrCode"
value={url}
size={300}
bgColor={"#00ff00"}
level={"H"}
/>
);
return (
<div className="qrcode__container">
<div ref={qrRef}>{qrcode}</div>
<div className="input__group">
<form notallow={downloadQRCode}>
<label>Enter URL</label>
<input
type="text"
value={url}
notallow={qrCodeEncoder}
placeholder="https://hackernoon.com"
/>
<button type="submit" disabled={!url}>
Download QR code
</button>
</form>
</div>
</div>
);
};

export default QrCode;

上述代碼對應的應用程序如下圖所示:

圖片

本教程描述了創建二維碼生成器的過程,以及如何下載以供后續使用。

參考資料:

二維碼:

https://github.com/zpao/qrcode.react?ref=hackernoon.com

錨元素(The anchor element):

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a?ref=hackernoon.com

二維碼簡介:

https://en.wikipedia.org/wiki/QR_code?ref=hackernoon.com

https://hackernoon.com/how-to-build-a-qr-code-generator-in-react

譯者介紹

趙青窕,51CTO社區編輯,從事多年驅動開發。?

責任編輯:武曉燕 來源: 51CTO技術棧
相關推薦

2022-02-22 08:20:04

React工具PDF 文件

2021-11-04 09:00:00

JavaSpring BootURL

2022-10-17 18:29:55

2024-12-23 08:00:00

2025-11-11 09:54:38

2021-12-10 09:45:19

生成器配置代碼

2010-09-07 16:31:17

SQL語句insert

2011-12-23 13:42:05

JavaScript

2021-04-22 21:15:38

Generator函數生成器

2017-07-01 16:02:39

分布式ID生成器

2015-08-25 11:07:58

2025-01-23 08:36:27

CSS開發工具

2024-11-01 15:51:06

2023-09-24 22:34:41

SpringBootRust

2023-05-17 16:02:00

CSS工具代碼生成器

2017-09-06 09:26:03

Python生成器協程

2021-07-23 11:24:54

Create Inc開源G代碼生成器

2024-08-19 00:00:00

表單生成器開發開源

2021-12-04 22:07:44

Python

2015-08-25 15:54:17

程序員代碼生成器
點贊
收藏

51CTO技術棧公眾號

91精品国产高清91久久久久久| 亚洲一区二区在线观| 91美女免费看| 日韩久久精品网| 91精品国产免费| 久操手机在线视频| 男女av在线| 久久精品理论片| 欧美激情亚洲另类| 成人乱码一区二区三区av| 高清在线一区| 亚洲国产精品一区二区久久| 欧美综合激情| 国产成人三级在线播放| 午夜在线精品偷拍| 欧美尺度大的性做爰视频| 亚洲精品乱码久久久久久久| 国产成人a视频高清在线观看| 一区二区三区四区蜜桃 | 日韩av一二三区| 欧美一级淫片| 精品福利在线导航| 中文字幕第100页| 国产美女精品写真福利视频| 中文字幕一区二区三区四区不卡| 国产一区二区三区四区五区在线| 正在播放亚洲精品| 国产一级视频在线观看| 91在线看黄| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美丰满少妇xxxxx做受| 久久亚洲AV无码专区成人国产| 亚洲日本va午夜在线电影| 91福利区一区二区三区| www.射射射| 2020国产在线视频| 国产精品私人影院| 看高清中日韩色视频| 性做久久久久久久| 国产一区二区三区免费观看| 国产女精品视频网站免费| 中文字幕亚洲乱码熟女1区2区| 国产精品mm| 欧美成人在线免费视频| 999福利视频| 精品一区二区三区中文字幕老牛| 精品一区二区三区四区在线| 污污内射在线观看一区二区少妇| 一区二区三区四区精品视频| 日韩亚洲欧美一区二区三区| 夜夜爽久久精品91| 95精品视频| 欧美日本一区二区在线观看| 黑人粗进入欧美aaaaa| 日本欧美日韩| 欧美在线免费观看视频| 日韩欧美在线免费观看视频| 欧美xxxx做受欧美护士| 91国产视频在线观看| 精品一卡二卡三卡| 国产不卡网站| 色婷婷亚洲婷婷| 成人久久久久久久久| 免费观看亚洲| 日本精品视频一区二区| 精品日韩久久久| 久久爱.com| 欧美精品高清视频| 91亚洲一线产区二线产区| 岛国av一区| 日韩av资源在线播放| a级大片在线观看| 精品99久久| 日韩在线不卡视频| 少妇久久久久久被弄高潮| 午夜视频精品| 1769国内精品视频在线播放| 天天综合天天干| 日韩精品电影在线观看| 国产区精品视频| 国产aⅴ爽av久久久久成人| 国产成人综合亚洲网站| 好看的日韩精品| 麻豆国产在线播放| 日韩一区欧美小说| 黄色一级片黄色| 97se综合| 欧美一级在线视频| 中文在线永久免费观看| 波多野结衣在线观看一区二区三区| 色婷婷综合成人av| 黄色激情视频在线观看| 日韩中文字幕不卡| 999在线观看免费大全电视剧| 欧美特黄一级视频| 国产欧美精品区一区二区三区| 正在播放一区二区三区| 国产精品13p| 欧美自拍丝袜亚洲| 苍井空张开腿实干12次| 蜜乳av综合| 久久影视电视剧免费网站| 亚洲视频免费播放| 精品一区二区三区影院在线午夜| 国产麻豆日韩| 看女生喷水的网站在线观看| 亚洲成a人v欧美综合天堂下载| 啊啊啊国产视频| 精品精品国产毛片在线看| 最新亚洲国产精品| 日韩乱码人妻无码中文字幕| 精品一区二区久久| 麻豆av一区二区三区久久| bt在线麻豆视频| 色94色欧美sute亚洲线路一久 | 视频一区二区中文字幕| 成人网在线视频| 男人久久精品| 午夜视频久久久久久| 中文字幕免费高清在线| 久久精品色播| 九九精品视频在线| www.亚洲激情| 久久综合视频网| 国产精品99久久久| 亚洲精品无码久久久久 | 国产精品igao网网址不卡| 欧美18视频| 欧美一区亚洲一区| 亚洲欧美综合v| 欧洲视频一区二区| 91麻豆精品在线观看| 欧美日韩91| 噜噜噜天天躁狠狠躁夜夜精品| 9765激情中文在线| 黄色片在线免费看| 亚洲自拍偷拍另类| 久久精品视频国产| av网在线播放| 日韩欧美中文在线视频| www.射射射| 亚洲精品日韩在线观看| 99在线看视频| 国产精品人成电影| 欧美精品精品精品精品免费| 亚洲美女性生活视频| 91精品国产一区二区三区香蕉| 亚洲h精品动漫在线观看| 亚洲欧洲日韩一区二区三区| www.欧美日韩国产在线| 九九九久久久精品| 日韩av在线发布| 国产欧美日韩亚洲一区二区三区| 99re久久最新地址获取| 欧美美女在线观看| 精品国内亚洲2022精品成人| 国产成人久久精品一区二区三区| www.成人影院| 韩国成人二区| 狂野欧美激情性xxxx欧美| 日本中文字幕在线观看| 成人在线高清视频| 欧美色视频免费| 嫩草研究院在线观看| 亚洲精品字幕在线| 黄色小视频免费在线观看| 国产精品无码天天爽视频| 91麻豆精品在线| 天天爱天天做天天爽| 国产美女激情视频| 无码人妻精品一区二区蜜桃色欲| 免费在线不卡视频| 五月婷婷色丁香| 中文字幕日韩免费| 最新在线中文字幕| 一级爱爱免费视频| www.av导航| 午夜一区在线观看| 国产资源在线播放| 黄在线免费看| 91制片在线观看| 欧美日韩精品免费观看视完整| 欧美aaa视频| 麻豆精品国产| 天堂av一区二区三区在线播放 | 国产精品久久麻豆| 欧美aaa免费| 免费观看成人性生生活片| 国产高清日韩| 国产喷水吹潮视频www| 污污的视频在线免费观看| 五月婷婷一区二区| 无码视频在线观看| 肥臀熟女一区二区三区| avtt亚洲| 男人最爱成人网| 大桥未久女教师av一区二区| 久久高清精品| 久久久久综合| 99精品一区二区| 一区二区三区四区在线| 欧美在线色视频| 日韩第一页在线| 欧美国产精品va在线观看| 成人午夜小视频| 国产一区二区丝袜高跟鞋图片| 久久久精品动漫| 污污污污污污www网站免费| 人人爽人人爽av| 日韩免费成人av| 91丨九色丨海角社区| 色婷婷在线视频| 黄色aa久久| 亚洲丝袜啪啪| 日韩精品一二三区| 国产调教视频一区| 欧美天堂一区二区三区| 伊人精品在线观看| 国产精品日韩欧美大师| 亚洲日本精品| 四虎国产精品永久免费观看视频| www.99re6| 亚洲欧美视频二区| 蜜桃久久精品成人无码av| 丁香六月婷婷综合| 毛片免费在线播放| 亚洲一区av| 中文日韩欧美| 国产精品乱码妇女bbbb| 日韩欧美一区电影| 欧美诱惑福利视频| 国产又大又长又粗又黄| 久久精品无码专区| 日韩精品1区2区| 一级毛片视频在线观看| 日本精品在线播放| 亚洲欧美不卡| 亚洲欧美aⅴ...| 日韩电视剧在线观看免费网站| 国产精品草莓在线免费观看| 日日噜噜夜夜狠狠久久丁香五月| 亚洲欧美在线不卡| 国产女同91疯狂高潮互磨| 欧美成人ⅴideosxxxxx| 国产精品v亚洲精品v日韩精品 | 午夜精品网站| 国产精品美女久久久久久久| 日韩视频123| 国产97免费视| 阿v天堂2017| 日韩一区二区三区四区在线| 猫咪在线永久网站| 超碰成人免费| 久久99国产精品免费| 欧美性极品少妇| 欧美日韩久久一区| 亚洲日本中文字幕免费在线不卡| 91观看网站| 亚洲男人天堂2021| 久久久久精彩视频| 日韩免费va| 毛片一区二区| 欧美性猛交xxxx乱大交3| 欧美激情中文字幕在线| 少妇久久久久久被弄到高潮| 国产精品综合激情| 色综合久久影院| 日韩精品1区| 亚洲免费在线视频| 久久综合九色九九| 亚洲天堂第一区| 福利所第一导航| 欧美videos另类精品| 黄色成人在线网站| 亚洲成人av中文| 66m—66摸成人免费视频| 国产资源在线视频| 香蕉污视频在线观看| 欧美日韩尤物久久| 韩国一区二区视频| 精品电影一区二区| 欧美美乳视频网站在线观看| 蜜乳av中文字幕| 天堂av在线电影| 校园激情久久| 91麻豆精品久久久久蜜臀| 亚洲欧美综合图区| 91九色国产社区在线观看| 野战少妇38p| 国产中文字幕在线播放| 久久久久久久久久久妇女| 亚洲综合网站在线观看| 91精品国产乱码久久久久久蜜臀 | www黄色在线观看| 曰本一区二区三区视频| 日韩一区欧美一区| 欧美一区第一页| 国产伦精品一区二区三区妓女下载 | 亚洲欧美日本一区二区三区| 亚洲欧美激情国产综合久久久| 精品国产一区二区三区香蕉沈先生| 国产精品国产精品国产专区不片 | 日本一区精品视频| 国产欧美日韩一区二区三区在线观看| 欧美成人高清视频| 国产第一页视频| 婷婷在线免费视频| 黄色欧美成人| 91精品国产乱码| 一区二区三区四区| 国产一区亚洲二区三区| 天堂网中文字幕| 日韩精品福利一区二区三区| 亚洲成人777| 国产精品一区二区免费看| 欧美久久久久久久久久久久| 欧美啪啪网站| 最新日韩av在线| 成人乱人伦精品视频在线观看| 91社区视频在线观看| 色综合天天色| 亚洲精品伦理在线| 成人18视频| 国产一区二区三区影院| 西野翔中文久久精品国产| 黑人精品xxx一区| 神马影院一区二区三区| 波多野结衣视频观看| 成人在线免费观看91| 欧美日韩美少妇| www.一区二区.com| 手机看片1024国产| 免费视频久久| 欧美精品免费在线| 亚洲国产精品成人综合久久久| 校园春色亚洲色图| 亚洲桃色在线一区| 精品乱码一区二区三区| 在线观看色网站| 亚洲精品123区| 日韩视频免费中文字幕| 亚洲av成人精品一区二区三区| 亚洲wwww| 午夜激情一区二区| 黄色污污在线观看| 久久精品国产亚洲a∨麻豆| 激情综合网最新| 国产精品久久久久久久久久尿| 久久机热这里只有精品| 欧美一区电影| 国产一区二区按摩在线观看| 91精品国产高清久久久久久久久| 日本精品在线免费观看| 免费成人av| 日韩精品视频免费专区在线播放 | 这里只有精品66| 日本精品在线| 国产欧美日韩亚州综合| 欧美日韩精品久久| 无码国产精品96久久久久| 丰满亚洲少妇av| 国产精品一区二区三区久久久 | 懂色av一区二区| 91精品一区二区三区在线观看| 99热成人精品热久久66| 超碰成人av| 欧美色道久久88综合亚洲精品| 成人午夜视频在线观看免费| av黄在线观看| 亚洲sss视频在线视频| 国产主播自拍av| 日韩精品极品| 欧洲精品一区二区三区在线观看| 国产又大又黄又粗的视频| av有声小说一区二区三区| 色婷婷激情综合| wwwwwxxxx日本| 日韩一区网站| 亚洲精品中文字| 亚洲综合图片一区| 午夜久久黄色| 欧洲精品久久久| 一炮成瘾1v1高h| 粉嫩高潮美女一区二区三区| 色偷偷av一区二区三区| 久久久久亚洲av无码麻豆| 国产丝袜精品丝袜| 亚洲成人黄色影院| 国产一伦一伦一伦| 久久夜色电影| 欧美成人免费观看| 国产午夜无码视频在线观看| 毛片一区二区三区| 精品国产aⅴ麻豆| 日本片在线看| 欧美丰满美乳xxx高潮www| 在线 丝袜 欧美 日韩 制服| 68国产成人综合久久精品| 国产成+人+综合+亚洲欧洲| 亚洲风情第一页|