Expo-camera Web端无法识别QR码但Android端正常问题求助
Expo Camera Web端无法识别QR码问题
我在使用React Web开发QR码读取功能时,发现Expo-camera在Android端可正常识别QR码,但Web端无控制台报错却无法检测到QR码。此前的后置摄像头选择问题已解决,尝试将expo版本降级至50.0.18后问题仍存在。以下是我的App.tsx代码及package.json配置:
App.tsx 代码
import { CameraView, CameraType, useCameraPermissions, BarcodeScanningResult } from 'expo-camera'; import { useState } from 'react'; import { Button, StyleSheet, Text, View } from 'react-native'; export default function App() { const [facing, setFacing] = useState<CameraType>('back'); const [permission, requestPermission] = useCameraPermissions(); const [hasPermission, setHasPermission] = useState(null); const [scanned, setScanned] = useState(false); if (!permission) { return <View />; } if (!permission.granted) { return ( <View style={styles.container}> <Text style={styles.message}>我们需要获取相机权限才能使用</Text> <Button onPress={requestPermission} title="授予权限" /> </View> ); } const handleBarCodeScanned = (result: BarcodeScanningResult) => { if (result) { const { type, data } = result; console.log(data); alert(data); } }; return ( <View style={styles.container}> <CameraView facing="back" // @ts-ignore - 类型未被识别,属于bug。Web端如果缺少这个属性会无法正常工作。 type="back" barcodeScannerSettings={{ barcodeTypes: [ 'aztec', 'ean13', 'ean8', 'qr', 'pdf417', 'upc_e', 'datamatrix', 'code39', 'code93', 'itf14', 'codabar', 'code128', 'upc_a', ], }} onBarcodeScanned={handleBarCodeScanned} style={StyleSheet.absoluteFillObject} /> {scanned && ( <Button title={'点击重新扫描'} onPress={() => setScanned(false)} /> )} </View> ); } const styles = StyleSheet.create({ container: { flex: 1, justifyContent: 'center', }, message: { textAlign: 'center', paddingBottom: 10, }, camera: { flex: 1, }, buttonContainer: { flex: 1, flexDirection: 'row', backgroundColor: 'transparent', margin: 64, }, button: { flex: 1, alignSelf: 'flex-end', alignItems: 'center', }, text: { fontSize: 24, fontWeight: 'bold', color: 'white', }, });
package.json 配置
{ "name": "expo-camera-5", "version": "1.0.0", "main": "expo/AppEntry.js", "scripts": { "start": "expo start", "android": "expo start --android", "ios": "expo start --ios", "web": "expo start --web" }, "dependencies": { "@expo/metro-runtime": "~3.2.3", "expo": "~51.0.28", "expo-camera": "~15.0.15", "expo-status-bar": "~1.12.1", "react": "18.2.0", "react-dom": "18.2.0", "react-native": "0.74.5", "react-native-web": "~0.19.10" }, "devDependencies": { "@babel/core": "^7.20.0", "@types/react": "~18.2.45", "typescript": "^5.1.3" }, "private": true }
内容的提问来源于stack exchange,提问作者Gringo
相关产品推荐
相关产品推荐

