A ideia por trás da criação de um gerador de código de resposta rápida (QR) é converter dados de imagens em texto. Um código QR é simplesmente a representação de dados de imagem como texto e possui muitos aplicativos úteis, desde menus de restaurantes e ingressos para shows, até convites de calendário online, pagamentos e a lista continua.
Neste tutorial, você aprenderá como criar um código QR usando a biblioteca JavaScript React. O benefício de usar o React é que ele facilita a criação de aplicativos de front-end, pois fornece aos desenvolvedores maneiras de reutilizar componentes.
Para seguir este tutorial, o seguinte será abordado:
Pré-requisitos
Para concluir este tutorial, você precisa do seguinte:
Começando
Antes de escrever uma linha de código, abra seu terminal e execute o seguinte comando:
npx create-react-app qrcode-generator
O comando acima monta os arquivos e instala alguns pacotes necessários para criar o aplicativo React.
Em seguida, navegue até o diretório do projeto e execute o servidor de desenvolvimento que pode ser acessado em
//localhost:3000
usando o comando abaixo para visualizar o aplicativo no navegador: cd qrcode-generator npm start
Finalmente, vamos instalar a biblioteca de dependência necessária para criar o gerador de código QR. Execute o comando:
npm install qrcode.react
qrcode.react
: um componente React para gerar códigos QR para renderização no DOM.Ótimo trabalho até agora!
A criação do gerador de código QR começará com a criação dos arquivos e componentes que conterão a estrutura do código QR. Dentro do diretório src, crie uma pasta chamada components e um arquivo chamado QrCode.js na pasta.
Copie e cole o seguinte código:
// 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 onSubmit = {downloadQRCode} >
< label > Enter URL </ label >
< input
type = "text"
value = {url}
onChange = {qrCodeEncoder}
placeholder = "//gzht888.com"
/>
< button type = "submit" disabled = {!url} >
Download QR code </ button >
</ form >
</ div >
</ div >
); }; export default QrCode;
Os trechos de código acima fazem o seguinte:
useState
é usado para declarar o estado inicial da variável, url que é definido como uma string vazia e o setState
função, setUrl
usado para atualizar o estado qrcode.react
, é usado para renderizar o código QR gerado downloadQRCode
função anexada ao onSubmit
método do <form>
elemento, pois isso é acionado pelo evento submit <input>
elemento, o onChange
manipulador de eventos com a função 'qrCodeEncoder'
recebe a entrada dos usuários, obtém seu valor e altera o código QR a cada nova entrada digitada qrcode
é criado. leva no QRCodeCanvas
componente e passa alguns prompts disponíveis que personalizam e tornam o código QR visível no navegador. Confira a documentação para saber mais sobre o no componente <button>
elemento é desabilitado até que a entrada do usuário receba dadosNo
src
pasta, crie a folha de estilo, styles.css
responsável pelo apelo visual do aplicativoCopie e cole o seguinte código:
/* 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 ; } }
Em seguida, importe o arquivo QrCode.js e a folha de estilo no ponto de entrada do aplicativo, App.js:
// src/App.js
import QrCode from "./components/QrCode" ; import "./styles.css" ; export default function App ( ) { return ( < div className = "section container" >
< QrCode />
</ div >
); }
Com as etapas concluídas, o aplicativo deve ficar assim:
A opção para os usuários baixarem o código QR gerado torna-o útil em uma ampla variedade de casos de uso. Desde imprimir o código até incorporá-lo em um site, os casos de uso são ilimitados.
De volta ao
components/QrCode.js
arquivo, vamos atualizar a base de código para usar refs
para acessar os nós do modelo de objeto de documento (DOM). // 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;
Agora, vamos atualizar o
downloadQRCode
função no QrCode.js
arquivo para poder clicar no botão de download do código QR e salvar a tela como um arquivo de imagem. // 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;
No
downloadQRCode
função, ocorre o seguinte: qrcode.react
componente produz o elemento canvas no DOM que lhe dá a capacidade de criar conteúdo dinamicamente toDataURL
método com o parâmetro de tipo especificado definido para o formato de arquivo, image/png
<a>
elemento é criado e o href
está definido para a imagem que baixa o código QR quando o botão é clicado setUrl
variável que limpa a entrada para o código QR gerado conforme o formulário é enviadoO código completo para o componente QrCode.js:
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 onSubmit = {downloadQRCode} >
< label > Enter URL </ label >
< input
type = "text"
value = {url}
onChange = {qrCodeEncoder}
placeholder = "//gzht888.com"
/>
< button type = "submit" disabled = {!url} >
Download QR code </ button >
</ form >
</ div >
</ div >
); }; export default QrCode;
O resultado final do aplicativo deve ficar assim:
Este tutorial descreveu o processo de criação de um gerador de código QR e como ele pode ser baixado para uso posterior.