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

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

相关推荐
gnip4 小时前
vite和webpack打包结构控制
前端·javascript
烛阴5 小时前
前端必会:如何创建一个可随时取消的定时器
前端·javascript·typescript
萌萌哒草头将军6 小时前
Oxc 最新 Transformer Alpha 功能速览! 🚀🚀🚀
前端·javascript·vue.js
1024小神7 小时前
nextjs项目build导出静态文件
前端·javascript
parade岁月8 小时前
JavaScript 日期的奇妙冒险:当 UTC 遇上 el-date-picker
javascript
是一碗螺丝粉8 小时前
拯救你的app/小程序审核!一套完美避开审核封禁的URL黑名单机制
前端·javascript·微信小程序
Juchecar8 小时前
采用 Vue 3 实现单页应用(SPA)与本地数据存储方案
前端·javascript·vue.js
雲墨款哥9 小时前
JS算法练习-Day10-判断单调数列
前端·javascript·算法
JuneXcy9 小时前
11.web api 2
前端·javascript·html
zYear10 小时前
Elpis 全栈应用框架-- 总结
前端·javascript