SCALE — Build Lab
機能パターン · REACT COMPONENT

バーコードスキャン(カメラ)

CATEGORY機能パターン TYPEReact Component EFFORT60〜120分 DIFFICULTY
PRIMARY CODE
tsx
'use client';
import { BrowserMultiFormatReader } from '@zxing/browser';
import { useEffect, useRef } from 'react';

export function BarcodeScanner({ onDetect }: { onDetect: (code: string) => void }) {
  const videoRef = useRef<HTMLVideoElement>(null);
  useEffect(() => {
    const reader = new BrowserMultiFormatReader();
    reader.decodeFromVideoDevice(undefined, videoRef.current!, (result) => {
      if (result) onDetect(result.getText());
    });
    return () => reader.reset();
  }, []);
  return <video ref={videoRef} style={{ width: '100%' }} />;
}
DEPENDENCIES
@zxing/browser
前提条件
Tailwind CSS v4TypeScript 5
USE CASES
  • 任意のダッシュボードに組み込み

バーコードスキャン(カメラ)

:LiTarget: 用途

カメラでJANコード・EAN・Code128等を読み取り。

:LiSparkle: 特徴

  • 複数フォーマット対応
  • リアルタイム認識
  • カメラ切替

:LiCode: コード(コピペ用)

'use client';
import { BrowserMultiFormatReader } from '@zxing/browser';
import { useEffect, useRef } from 'react';

export function BarcodeScanner({ onDetect }: { onDetect: (code: string) => void }) {
  const videoRef = useRef<HTMLVideoElement>(null);
  useEffect(() => {
    const reader = new BrowserMultiFormatReader();
    reader.decodeFromVideoDevice(undefined, videoRef.current!, (result) => {
      if (result) onDetect(result.getText());
    });
    return () => reader.reset();
  }, []);
  return <video ref={videoRef} style={{ width: '100%' }} />;
}

:LiHandPointer: 使い方

対象プロジェクトに該当ファイルをコピーして、props を流し込むだけ。

:LiAlertCircle: 注意事項

  • 依存パッケージを忘れず追加