[React] 리액트 QR 코드 생성하기 (qrcode.react)

2024. 10. 29. 20:00·Front-End/React

결과 QR 코드

 

프로젝트에서 주소를 복사하기 위해서

QR 코드를 생성하고 스캔해야 하는

기능을 구현해야 했었는데요.

 

먼저 QR 코드 생성을 위해서

qrcode.react 라이브러리를 사용했습니다.

사용방법 알아봅시다 😀

 

QR코드 스캔은 2탄으로 작성할게요


📝 라이브러리 소개

https://www.npmjs.com/package/qrcode.react

 

qrcode.react

React component to generate QR codes. Latest version: 4.1.0, last published: 7 days ago. Start using qrcode.react in your project by running `npm i qrcode.react`. There are 970 other projects in the npm registry using qrcode.react.

www.npmjs.com

⦁ qrcode.react

주간 다운로드 수 100만이 넘는 인기 있는 라이브러리입니다.

사용방법이 간단하고 다양한 props를 지원하여 QR 코드의 색상 등을 쉽게 변경할 수 있습니다.

또한 캔버스로 QR 코드를 생성하기 때문에 필요에 따라 이미지 파일로 저장하는 것도 가능합니다. 

 

기존 서버에서 생성하고 전달받았던 QR코드는 스타일 커스터마이징이 불가능했는데,

해당 라이브러리를 사용해서 프런트엔드에서 생성할 경우 테마에 따른 색상 등

디자인 요구사항을 쉽게 맞출 수 있어서 좋았습니다. 😎

 

⦁ Install

npm install qrcode.react
// or
yarn add qrcode.react

 

⦁ 공식문서 샘플코드

// QRCodeSVG 
import ReactDOM from 'react-dom';
import {QRCodeSVG} from 'qrcode.react';

ReactDOM.render(
  <QRCodeSVG value="https://reactjs.org/" />,
  document.getElementById('mountNode')
);

// QRCodeCanvas
import ReactDOM from 'react-dom';
import {QRCodeCanvas} from 'qrcode.react';

ReactDOM.render(
  <QRCodeCanvas value="https://reactjs.org/" />,
  document.getElementById('mountNode')
);

공식 문서에 있는 샘플코드입니다.

QRCodeSvg와 QRCodeCanvas 2가지 방식이 존재합니다.

 

말 그대로 SVG와 Canvas 둘 중 무엇으로 렌더링 하냐의 차이라고 하는데,

프로젝트 환경에 맞게 선택하면 될 것 같습니다.

블로그나 챗GPT 에서는 <QRCode value="https://example.com" />
이런 방식으로 알려주는 경우가 많은데, 지금은 동작하지 않는 걸 보니 예전 버전의 코드인듯 합니다.

 

⦁ QR 코드 커스터마이징

 

문서를 조금 내리면 사용 가능한 Props 목록이 존재합니다.

주요 Props 목록은 다음과 같습니다.

value: QR 코드로 인코딩할 값 (URL, 텍스트 등)
size: QR 코드의 크기 (기본값은 128px)
bgColor: QR 코드 배경색 (기본값은 흰색)
fgColor: QR 코드 전경색 (기본값은 검은색)

 



📝 소스코드

⦁ GenerateQrCode.jsx

'use client';

import React from 'react';
import { Box, styled, useTheme } from '@mui/material';
import { QRCodeCanvas } from 'qrcode.react';

const Container = styled(Box)({
  display: 'flex',
  justifyContent: 'center',
  alignItems: 'center',
  width: '100%',
  height: '100%',
});

function GenerateQrCode({ address, size = 108, bgColor = null }) {
  const theme = useTheme();

  return (
    <Container>
      <QRCodeCanvas
        value={address}
        size={size}
        bgColor={bgColor ? bgColor : theme.palette.background.paper}
        fgColor={theme.palette.mode === 'dark' ? '#fff' : '#000'}
      />
    </Container>
  );
}

export default GenerateQrCode;

...

// 사용하는 곳
<GenerateQrCode address={data.address} />

 

저는 Next.js의 CSR과 MUI의 Theme를 사용하고 있기 때문에

위와 같은 컴포넌트를 만들었습니다.

 

핵심 코드인 QRCodeCanvas는 변하지 않으니 참고하세요! 🥳

다음 포스팅은 QR코드를 스캔하는 방법으로 돌아오겠습니다.


 


참고 문헌 : 

https://www.npmjs.com/package/qrcode.react?activeTab=readme

'Front-End > React' 카테고리의 다른 글

[React] 리액트 SNS 공유하기 기능 개발하기 (Web Share API란?)  (4) 2024.11.14
[React] 리액트 QR 코드 스캔하기 (react-qr-reader)  (6) 2024.10.31
[React] Zustand란? 사용하는 이유! (상태 관리 라이브러리, 사용 방법 예시)  (3) 2024.03.14
[React] 리액트 CSS 초기화란? (CSS Reset, 여백 제거)  (2) 2023.10.12
[React & Vue] 조건부 렌더링이란? (사용 예시, 사용 목적)  (2) 2023.07.14
'Front-End/React' 카테고리의 다른 글
  • [React] 리액트 SNS 공유하기 기능 개발하기 (Web Share API란?)
  • [React] 리액트 QR 코드 스캔하기 (react-qr-reader)
  • [React] Zustand란? 사용하는 이유! (상태 관리 라이브러리, 사용 방법 예시)
  • [React] 리액트 CSS 초기화란? (CSS Reset, 여백 제거)
현기
현기
  • 현기
    현기의 개발블로그
    현기
  • 전체
    오늘
    어제
    • 분류 전체보기 (120)
      • Front-End (39)
        • Next (5)
        • React (8)
        • React Native (11)
        • Flutter (0)
        • Vue (1)
        • JSP (9)
        • HTML, CSS, JS (5)
      • Back-End (16)
        • Node.js (3)
        • Spring (8)
        • Flask (1)
        • AWS (4)
      • DB (5)
        • Oracle (4)
        • MySQL (1)
      • Python (7)
      • Java (27)
        • 자바 이론 (17)
        • 코딩테스트 연습 & 실습 (10)
      • 자료구조 & 알고리즘 (7)
        • 코딩테스트 (6)
        • 알고리즘 (1)
      • 블록체인 (0)
      • 프롬프트 엔지니어링 (0)
      • CS 지식 (5)
      • IT뉴스 (0)
      • 일상 (3)
      • etc (11)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    포스트맨
    React Native Chart
    자바스크립트
    Python
    Express
    자바
    스택
    react
    상속
    react-native-chart-kit
    파이썬
    큐
    그리디
    JSP
    React Native
    자바 스프링
    Java
    오라클
    리액트 네이티브
    IS-A
    티스토리챌린지
    DI
    쓰레드
    next-intl
    REST API
    Spring
    node.js
    오블완
    서블릿
    JDBC
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
현기
[React] 리액트 QR 코드 생성하기 (qrcode.react)
상단으로

티스토리툴바