Expo|ReactNative 中实现扫描二维码功能

Expo 项目中使用 `expo-barcode-scanner` 实现扫描二维码:

1、安装

expo install expo-barcode-scanner

2、代码逻辑

javascript 复制代码
import React, { useState, useEffect } from 'react';
import { Text, View, StyleSheet, Button } from 'react-native';
import { BarCodeScanner } from 'expo-barcode-scanner';

export default function QRScanner() {
  const [hasPermission, setHasPermission] = useState(null);
  const [scanned, setScanned] = useState(false);
  const [scannedData, setScannedData] = useState(null);

  useEffect(() => {
    (async () => {
      const { status } = await BarCodeScanner.requestPermissionsAsync();
      setHasPermission(status === 'granted');
    })();
  }, []);

  const handleBarCodeScanned = ({ type, data }) => {
    setScanned(true);
    setScannedData(data);
    // 处理扫描到的二维码数据
    alert(`扫描到的数据类型:${type},数据内容:${data}`);
  };

  if (hasPermission === null) {
    return <Text>请求相机权限中...</Text>;
  }
  if (hasPermission === false) {
    return <Text>未获得相机权限</Text>;
  }

  return (
    <View style={styles.container}>
      <BarCodeScanner
        onBarCodeScanned={scanned ? undefined : handleBarCodeScanned}
        style={StyleSheet.absoluteFillObject}
      />
      {scanned && (
        <Button title="重新扫描" onPress={() => setScanned(false)} />
      )}
      {scannedData && <Text>扫描到的数据:{scannedData}</Text>}
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    flexDirection: 'column',
    justifyContent: 'center',
  },
});

以上代码使用了 `BarCodeScanner` 组件来扫描二维码。该组件会检查用户是否已授予相机权限,并根据权限状态显示相应的内容。当扫描到二维码时,会触发 `handleBarCodeScanned` 函数,你可以在这里处理扫描到的数据。

在示例中,我用一个弹窗来展示扫描到的数据,你可以根据需求进行处理。

相关推荐
阿豪只会阿巴38 分钟前
【没事学点啥】TurboBlog轻量级个人博客项目——项目介绍
javascript·python·django·html
Lee川44 分钟前
面试手写 KeepAlive:React 组件缓存的实现原理
前端·react.js·面试
刀法如飞2 小时前
TypeScript 数组去重的 20 种实现方式,哪一种你还不知道?
前端·javascript·算法
_风满楼3 小时前
TDD实战-会议室冲突检测的红绿重构循环
前端·javascript·算法
Rkgua3 小时前
JS中的惰性函数基本介绍
前端·javascript
客场消音器3 小时前
我用两周半 Vibe Coding 做了一个前额叶训练的微信小程序
前端·javascript·后端
不考研当牛马5 小时前
HTML CSS 新手大全初学者必看 (含有部分 JavaScript)
javascript·css·html
卷帘依旧5 小时前
Promise链式调用原理
前端·javascript
光影少年5 小时前
react 单向数据流理解
前端·react.js·掘金·金石计划
threelab6 小时前
Three.js 图像粒子飞线效果 | 三维可视化 / AI 提示词
开发语言·javascript·人工智能