精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

奇米影视四色在线| 视频在线观看成人| 国产午夜视频在线播放| 最新精品国偷自产在线| 色婷婷激情久久| 一区二区日本伦理| 日本黄视频在线观看| 久久不射中文字幕| 久久国产一区二区三区| 少妇精品无码一区二区三区| av免费在线一区| 亚洲精品一二三| 国内一区在线| 中文字幕av在线免费观看| 欧美国产先锋| 国产亚洲视频在线观看| 久久人人爽人人片| 国产精品迅雷| 亚洲一二三区在线观看| 日韩精品电影网站| 好吊色一区二区三区| 日本亚洲最大的色成网站www| 久久精品在线视频| 成人h动漫精品一区| 成人av在线播放| 一本久道中文字幕精品亚洲嫩 | 成人在线视频中文字幕| 在线视频欧美区| 黄色成人在线看| 91cn在线观看| 国产精品狼人久久影院观看方式| 国产一区二区精品在线| 国产青青草视频| 蜜臀av一区二区| 国产成人97精品免费看片| 日韩精品一区三区| 好看不卡的中文字幕| yellow中文字幕久久| jizz18女人高潮| 亚欧洲精品视频在线观看| 精品噜噜噜噜久久久久久久久试看| 国产aaaaa毛片| 三级成人黄色影院| 狠狠躁夜夜躁人人爽超碰91| 国产又粗又猛又爽又黄的网站| 午夜小视频在线| 国产日韩三级在线| 牛人盗摄一区二区三区视频| 五月婷婷狠狠干| 成人国产精品视频| 国产精品theporn88| 国产成人精品亚洲精品色欲| 国产一区二区在线观看视频| 国产精品视频精品视频| 日韩久久久久久久久久| 日韩1区2区3区| 国产精品美女午夜av| 国产男人搡女人免费视频| 视频一区视频二区中文| 日本中文字幕成人| 青青国产在线视频| 琪琪一区二区三区| 成人黄色av播放免费| 国产精品一区二区av白丝下载| 久久国产福利国产秒拍| 91人成网站www| www.激情五月| 成人av免费在线观看| 国产一区二区在线观看免费播放| 少妇高潮一区二区三区99小说| 99久久精品国产网站| 久久久www免费人成黑人精品| 日av在线播放| 日本一区二区三级电影在线观看| 亚洲一区影院| av软件在线观看| 亚洲国产日韩精品| 人妻少妇被粗大爽9797pw| 欧美特大特白屁股xxxx| 欧美日韩精品专区| 黄色片子免费看| 老司机精品在线| 亚洲桃花岛网站| 精品一区二区在线观看视频| 一本一道久久综合狠狠老| 色综合久久88| 久久国产视频精品| 开心九九激情九九欧美日韩精美视频电影| 91精品视频免费观看| 亚洲精品一区二区三区区别| 久久色视频免费观看| 日韩中文一区| 欧美性猛片xxxxx免费中国| 欧美日韩国产中文字幕| 久久黄色片网站| 高清欧美性猛交xxxx黑人猛| 亚洲天堂成人在线| 欧美黄色aaa| 亚洲综合另类| 91香蕉亚洲精品| 天堂成人在线| 亚洲啪啪综合av一区二区三区| 欧美精品自拍视频| 欧美高清xxx| 亚洲国产女人aaa毛片在线| 亚洲v国产v欧美v久久久久久| 五月天综合网站| 欧美性受xxx| 99热这里精品| 国产欧美精品在线观看| 欧美日韩福利在线| 日韩久久一区| 亚洲欧美精品一区| 国产性70yerg老太| 极品销魂美女一区二区三区| 蜜桃精品久久久久久久免费影院| 91麻豆免费在线视频| 日本韩国欧美国产| 午夜男人的天堂| 亚洲深深色噜噜狠狠爱网站| 国产99久久久欧美黑人 | 亚洲男人的天堂在线| 久草中文在线视频| 精品中文字幕一区二区| 欧美色图亚洲自拍| 麻豆免费在线| 日韩一区二区不卡| 美女三级黄色片| 日本中文字幕不卡| 欧美日韩电影一区二区三区| 变态调教一区二区三区| 欧美一区二区三区在| 貂蝉被到爽流白浆在线观看| 久久综合图片| 久99久在线| 国产福利电影在线播放| 日韩欧美卡一卡二| 午夜国产小视频| 蜜臀久久久99精品久久久久久| 免费看污久久久| 高清av不卡| 亚洲欧洲黄色网| 黄色在线观看国产| 久久综合久久综合久久综合| 少妇高潮毛片色欲ava片| 亚洲va欧美va人人爽成人影院| 久久精品成人欧美大片| 中文字幕二区三区| 国产精品午夜久久| 中文久久久久久| 成人在线免费观看视频| 国产精品第1页| 高清av在线| 欧美日韩中字一区| jizz日本在线播放| 激情欧美一区二区三区在线观看| 中文字幕一区二区三区有限公司| 欧美国产日韩电影| 日韩午夜在线视频| 国产农村妇女毛片精品久久| 亚洲精品日韩专区silk| 91精品国产高清91久久久久久| 欧美日韩免费| 国产在线一区二| 一区二区乱码| 中文字幕亚洲无线码a| 一区二区三区免费在线| 亚洲欧洲成人自拍| 国产伦理在线观看| 中文亚洲免费| 丝袜美腿玉足3d专区一区| 色综合久久久| 欧美精品成人在线| 你懂的免费在线观看| 欧美丝袜第三区| 老女人性淫交视频| 99re66热这里只有精品3直播| 播放灌醉水嫩大学生国内精品| 国产一区二区三区四区| 91亚洲精品久久久| av岛国在线| 中文字幕日韩精品在线观看| 99免费在线视频| 懂色aⅴ精品一区二区三区蜜月| 极品人妻videosss人妻| 国产在线播放一区三区四| 草b视频在线观看| 国产欧美日韩在线一区二区| 成人做爽爽免费视频| 888av在线视频| 一本一本久久a久久精品牛牛影视 一本色道久久综合亚洲精品小说 一本色道久久综合狠狠躁篇怎么玩 | 日本电影一区二区| 91九色视频在线| 国产精品论坛| 中文字幕久精品免费视频| 国产成人麻豆精品午夜在线| 五月婷婷久久综合| 欧美成人另类视频| 粉嫩13p一区二区三区| 国产熟人av一二三区| 欧美全黄视频| 五码日韩精品一区二区三区视频| 日韩激情精品| 国产精品美女久久久久av超清| 乱插在线www| 最新亚洲国产精品| 色久视频在线播放| 欧美一激情一区二区三区| 日日夜夜狠狠操| 亚洲精品写真福利| 三上悠亚影音先锋| 成人听书哪个软件好| 91亚洲精品久久久蜜桃借种| 一区二区毛片| 日本精品福利视频| 成人a'v在线播放| 麻豆av一区| 精品福利网址导航| 91蜜桃网站免费观看| 久久天天久久| 国产91露脸中文字幕在线| 高h视频在线播放| 欧美成人精品影院| 午夜看片在线免费| 亚洲香蕉在线观看| 日韩av免费观影| 亚洲精品成人网| 丰满肉嫩西川结衣av| 911精品国产一区二区在线| 伊人中文字幕在线观看| 亚洲国产成人精品视频| 18岁成人毛片| 亚洲欧洲日韩在线| 亚洲精品成人av久久| 久久免费电影网| 日本xxx在线播放| 99久久精品国产一区二区三区 | 在线观看视频一区二区三区| 国产又爽又黄的激情精品视频| 韩国精品主播一区二区在线观看| 欧美专区第一页| 亚洲欧美电影| 秋霞午夜一区二区| 亚洲福利影院| 26uuu亚洲国产精品| 欧美办公室脚交xxxx| 69久久夜色精品国产7777| wwwwxxxx在线观看| 97精品视频在线| 17videosex性欧美| 97色在线观看| 国产免费不卡| 国产福利视频一区二区| 不卡亚洲精品| 国产欧美在线观看| 国产精品亚洲欧美日韩一区在线| 国产一区视频在线播放| 激情不卡一区二区三区视频在线| 91久久久久久久久久| 欧美专区一区| 国产一区二区三区av在线| 麻豆一区二区麻豆免费观看| 极品校花啪啪激情久久| 免费成人蒂法| 欧美理论一区二区| 日韩免费一区| www.99riav| 亚洲人人精品| 欧美性久久久久| 久色婷婷小香蕉久久| 国内精品国产三级国产aⅴ久| 国产成人免费xxxxxxxx| 亚洲麻豆一区二区三区| 久久久久久久性| 日韩免费av一区| 亚洲尤物视频在线| 久久精品视频1| 在线播放欧美女士性生活| 亚洲av无码国产综合专区| 亚洲国产精品免费| 成人在线免费公开观看视频| 久久久精品国产网站| 爱搞国产精品| 国产精品福利网站| 日韩区欧美区| 欧美日韩精品中文字幕一区二区| 欧美激情偷拍自拍| 97干在线视频| 三级影片在线观看欧美日韩一区二区| 成年人三级黄色片| 成人av午夜电影| 国产传媒在线看| 亚洲电影一区二区三区| 午夜一级黄色片| 精品黑人一区二区三区久久| 国产女人在线观看| 欧美日韩福利电影| 先锋欧美三级| 国产美女99p| 三区四区不卡| 少妇av一区二区三区无码| 看电视剧不卡顿的网站| 国产高清自拍视频| 亚洲欧美在线观看| 在线观看亚洲天堂| 7777精品伊人久久久大香线蕉 | 久久国产精品成人免费观看的软件| 狠狠噜天天噜日日噜| 久久九九免费| 美女伦理水蜜桃4| 中文字幕一区二区三区不卡在线 | 精品176二区| 热久久免费视频精品| 亚洲视频国产精品| 五月天久久综合网| 免费亚洲婷婷| 国产 xxxx| 一区二区三区视频在线观看| 中文字幕第三页| 亚洲欧美色图片| 2020国产在线| 亚洲一区亚洲二区亚洲三区| 波多野结衣的一区二区三区 | 日韩精品视频免费专区在线播放 | 中文字幕一二三| 国产清纯在线一区二区www| 特一级黄色大片| 精品国产免费一区二区三区香蕉| 国精产品一区| 国产日韩欧美中文在线播放| 欧美精品一二| 波多野结衣家庭教师视频| 99视频有精品| 日产精品久久久久| 欧美成人综合网站| 污污网站在线看| 91国产在线免费观看| 欧美黄色一区| 日本少妇xxx| 玉米视频成人免费看| 国产精品热久久| 美日韩精品免费视频| 91麻豆精品国产91久久久更新资源速度超快| 日本一区二区三区视频在线播放| 免费在线播放第一区高清av| 天天插天天射天天干| 欧美日韩国产精品一区二区三区四区| 成人乱码一区二区三区| 国内精品久久久久影院 日本资源| 视频在线亚洲| 亚洲精品蜜桃久久久久久| 成人黄色在线网站| 国产精品黄色大片| 日韩国产高清视频在线| www.成人爱| 色综合久久av| 国内成+人亚洲+欧美+综合在线| 蜜臀av午夜精品久久| 欧美一区二区成人| 国产高清在线a视频大全| 成人在线观看网址| 亚洲狼人精品一区二区三区| 青青草视频播放| 91福利在线观看| 日本亚洲精品| 97人人模人人爽视频一区二区| 亚洲国产高清视频| 国产精品九九九九九| 欧美日韩久久不卡| 91麻豆一二三四在线| 精品视频第一区| 日韩vs国产vs欧美| 久久久久99精品成人片试看| 精品国产一区a| 亚洲1234区| av动漫免费观看| 成人国产精品免费观看视频| av毛片在线免费观看| 色综合伊人色综合网| 玖玖玖视频精品| 国产免费观看高清视频| 中文子幕无线码一区tr| 99久久免费国产精精品| 国内精品久久久| 色综合久久网| 国产精品99精品无码视亚| 一本久久a久久精品亚洲| 成人福利片网站| 久久偷窥视频| 韩日av一区二区| 亚洲 欧美 日韩 综合| 日韩视频第一页| 欧美日韩夜夜| 国产又黄又猛的视频| 亚洲成av人片一区二区| av资源网在线观看| 国产偷久久久精品专区| 麻豆精品在线视频| 久久久久久久极品| 久久国产精品影视|