Expo-camera onbarcodescans只能工作一次



我试图使一个应用程序,基本上必须能够连续扫描Qr码。它看起来像这样(省略了无用的部分):

const QRScanner = () => {
const [scanned, setScanned] = useState(false);
const [result, setResult] = useState('Nothing scanned yet');
const scanHandler = ({type, data}) => {
setScanned(true);
setResult(data);

setTimeout(() => {
setScanned(false);
}, 3000);
}
return (
<View>
<Camera
onBarcodeScanned={scanned ? undefined: scanHandler}
>
<Text>{result}</Text>
</Camera>
</View>
)
}

不幸的是,在执行过程中,Camera模块似乎只能扫描一次任何类型的条形码。这应该已经解决与世博会的发行版本45.0.6(如图所示),但即使在更新后,我有同样的问题。

任何帮助都是感激的。

我在android设备上遇到了同样的问题。我找到了以下三个可行的解决方案:

解决方案1:

该问题已在以下版本中修复:

  • "expo"^ 46.0.0",
  • "expo-camera"~ 12.3.0",

先升级expo-cli,再升级项目中的expo SDK:

1. npm i -g expo-cli

2. expo upgrade 46

解决方案2:expo-camera库替换为expo-barcode-scanner。执行如下命令:

expo install expo-barcode-scanner

并将<Camera>标签替换为<BarCodeScanner>

解决方案3:

keyprop传递给<Camera>组件,并在onBarCodeScanned回调上更新键,如下所示。

const [isScanned, setIsScanned] = useState(false);

<Camera
key={isScanned ? 1 : 2}
onBarCodeScanned={(result) => {
handleOnBarCodeScanned(result);
setIsScanned(!isScanned);
}}
/>

似乎你已经逆转了在scanHandler中切换扫描值的逻辑:

const scanHandler = ({type, data}) => {
setScanned(false); // <----- change this 
setResult(data);

setTimeout(() => {
setScanned(true); // <----- change this 
}, 3000);
}

:

<Camera onBarcodeScanned={scanned && scanHandler} >

相关内容

  • 没有找到相关文章

最新更新