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` 函数,你可以在这里处理扫描到的数据。

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

相关推荐
paopaokaka_luck1 天前
宠物门店经营管理系统(销售与库存联动、进货自动记账、 退换与退款关联、员工个人业绩、ECharts 经营分析、滞销识别与客户分层、宠物档案年龄计算)
前端·javascript·spring boot·mysql·echarts·mybatis·1024程序员节
空中湖1 天前
用 React 写数据大屏:为什么我不建议用图表库
前端·react.js·前端框架
鶴哥只手遮天1 天前
jQuery 4.0 源码架构与工程实践-第 10 章 尺寸、几何与显隐
前端·javascript·jquery
米米商聊1 天前
图标能点,按钮就可用了吗?键盘、名称与收藏状态
前端·javascript
技术小甜甜2 天前
【Cursor】Skill 被标黄色警告,怎么改成合格的 SKILL.md
开发语言·javascript·ai编程·cursor·1024程序员节·ai agent·skills
qetfw2 天前
Bash 函数与流程控制:read、if、for、case 验证
linux·前端·javascript·bash
鬼手点金2 天前
从 API 消息到模型 Token:Chat Template
java·前端·javascript·数据库·人工智能·深度学习·1024程序员节
Mr.Pascal2 天前
Javascript之什么是作用域?
javascript·1024程序员节
microrain2 天前
设备报文怎么变,SagooIoT 只约定三个函数名
javascript·物联网·golang·sagooiot
Bug收容所2 天前
Vue+JS Day3
前端·javascript·vue.js·前端框架·1024程序员节