当前位置:首页 > React

react实现扫码

2026-01-26 23:47:08React

React 实现扫码功能的方法

在 React 中实现扫码功能可以通过多种方式完成,以下是几种常见的方法:

使用第三方库 react-qr-reader

安装 react-qr-reader 库:

npm install react-qr-reader

在组件中使用:

import React, { useState } from 'react';
import QrReader from 'react-qr-reader';

const QRScanner = () => {
  const [result, setResult] = useState('');

  const handleScan = (data) => {
    if (data) {
      setResult(data);
    }
  };

  const handleError = (err) => {
    console.error(err);
  };

  return (
    <div>
      <QrReader
        delay={300}
        onError={handleError}
        onScan={handleScan}
        style={{ width: '100%' }}
      />
      <p>扫描结果: {result}</p>
    </div>
  );
};

export default QRScanner;

使用原生 HTML5 API

通过浏览器原生 API 实现扫码功能:

import React, { useRef, useState } from 'react';

const QRScanner = () => {
  const videoRef = useRef(null);
  const [result, setResult] = useState('');

  const startScan = async () => {
    const stream = await navigator.mediaDevices.getUserMedia({ video: true });
    videoRef.current.srcObject = stream;

    // 这里可以使用第三方库如 Instascan 或 jsQR 处理视频流
  };

  return (
    <div>
      <video ref={videoRef} autoPlay playsInline />
      <button onClick={startScan}>开始扫描</button>
      <p>扫描结果: {result}</p>
    </div>
  );
};

export default QRScanner;

使用 jsQR 库处理二维码

安装 jsqr 库:

npm install jsqr

结合 jsQR 处理视频流:

react实现扫码

import React, { useRef, useState, useEffect } from 'react';
import jsQR from 'jsqr';

const QRScanner = () => {
  const videoRef = useRef(null);
  const canvasRef = useRef(null);
  const [result, setResult] = useState('');

  useEffect(() => {
    const startScan = async () => {
      const stream = await navigator.mediaDevices.getUserMedia({ video: true });
      videoRef.current.srcObject = stream;

      const canvas = canvasRef.current;
      const context = canvas.getContext('2d');

      const scanFrame = () => {
        if (videoRef.current.readyState === videoRef.current.HAVE_ENOUGH_DATA) {
          canvas.height = videoRef.current.videoHeight;
          canvas.width = videoRef.current.videoWidth;
          context.drawImage(videoRef.current, 0, 0, canvas.width, canvas.height);

          const imageData = context.getImageData(0, 0, canvas.width, canvas.height);
          const code = jsQR(imageData.data, imageData.width, imageData.height);

          if (code) {
            setResult(code.data);
          }
        }
        requestAnimationFrame(scanFrame);
      };
      scanFrame();
    };
    startScan();
  }, []);

  return (
    <div>
      <video ref={videoRef} autoPlay playsInline style={{ display: 'none' }} />
      <canvas ref={canvasRef} />
      <p>扫描结果: {result}</p>
    </div>
  );
};

export default QRScanner;

注意事项

  • 确保应用运行在 HTTPS 环境下,因为大多数浏览器要求安全上下文才能访问摄像头。
  • 在移动设备上测试时,可能需要处理横竖屏适配问题。
  • 考虑添加权限请求失败的处理逻辑,提升用户体验。

以上方法可以根据项目需求选择适合的方案。第三方库通常提供更简单的集成方式,而原生 API 和 jsQR 组合则提供更多自定义控制。

标签: react
分享给朋友:

相关文章

react moment如何使用

react moment如何使用

安装 react-moment 通过 npm 或 yarn 安装 react-moment 包。确保项目中已安装 moment.js,因为 react-moment 依赖它。 npm install…

react native 如何

react native 如何

React Native 开发基础 React Native 是一个用于构建跨平台移动应用的框架,允许开发者使用 JavaScript 和 React 编写代码,同时生成原生 iOS 和 Androi…

react如何更新

react如何更新

更新 React 版本的方法 检查当前 React 版本 运行以下命令查看项目中安装的 React 版本: npm list react 更新 React 及相关依赖 通过 npm 或 yarn…

react如何读

react如何读

React 的发音 React 的发音为 /riˈækt/(音标),读作“瑞-艾克特”。其中: “Re” 发音类似英文单词 “read” 的开头部分。 “act” 发音与英文单词 “act” 一致。…

如何开发react

如何开发react

开发React应用的基本步骤 安装Node.js和npm 确保系统中已安装Node.js(包含npm)。可通过官网下载安装包,安装后验证版本: node -v npm -v 创建React项目…

react如何重启

react如何重启

重启 React 应用的方法 重新加载当前页面 使用 window.location.reload() 强制刷新页面,这会重新加载整个应用并重置所有状态。 window.location…