ys memos

Blog

reactのqrcode-readerパッケージを公開しました


npm

2021/11/30


react-qr-readerを以前使っていて,かなり重用していたのだが,どうも3年以上メンテナンスされていないようで,過去の React に対する peerDep が設定されており,force install しなくてはならないようだった.

force install しても動作は確認できており,問題なく使える.しかし,QR コードリーダは今後も使う機会が多いと予想される点と,できるだけ force install は避けたいという点から,自分で QR コードリーダのライブラリを React Hooks を用いながら開発した.

そして,ある程度汎用性の高い機能のため,自分だけで保持するのも勿体なく感じたため,npm に公開した.



https://www.npmjs.com/packagereact-qrcode-reader


$ npm install react-qrcode-reader

コールバックを自分で作るパターンだが,コールバックにはstringではなくjsqrQRCode型が渡されるので,注意が必要.

import React from 'react';

import QrCodeReader, { QRCode } from 'react-qrcode-reader';

const App: React.FC = () => {
  const [val, setVal] = React.useState<string>('');

  const handleRead = (code: QRCode) => {
    setVal(code.data);
  };

  return (
    <>
      <QrCodeReader delay={100} width={500} height={500} onRead={handleRead} />
      <p>{val}</p>
    </>
  );
};

export default App;

基本的に QR コードリーダを使う場合はシンプルなセッターをコールバックにすることが多いので,セッターを受ける Prop も作ってみた.

コールバックには,読み込まれた文字列を引数として呼ばれる.

例えば,console.logactionに渡した場合,ログ出力がされる.

import React from 'react';

import QrCodeReader, { QRCode } from 'react-qrcode-reader';

const App: React.FC = () => {
  const [val, setVal] = React.useState<string>('');

  return (
    <>
      <QrCodeReader delay={100} width={600} height={500} action={setVal} />
      <p>{val}</p>
    </>
  );
};

export default App;

proptypeinstructiondefault
delaynumberキャプチャの遅延時間
widthnumber画像の width
heightnumber画像の height
onRead(QRCode) => voidqrcode 読み込み時のコールバックnone
action(string) => voidqrcode 読み込み時の actionnone

正直,onReadactionの名前はあまり意味を考えずに決めたので,「そういうもの!」として扱ってほしい...


いやぁー,npm パッケージ開発は楽しいですねぇ!


関連タグを探す