当前代码:
import QRCodeScanner from 'react-native-qrcode-scanner';
function ScanScreen({ navigation }) {
return (
navigation.navigate('Third', {target:data.data})}
/>
);
}它可以工作,但这是我想要做的:用户可以在屏幕之间导航,其中一个是二维码扫描器。在扫描时,我需要解除扫描器的抖动,这样它就不会一直生成onRead事件。用户可以a)在不读取QR码的情况下在扫描屏幕中开始扫描并手动导航到另一屏幕。b)读取QR并自动移动到另一个屏幕进行处理,然后返回再次扫描。出于这个原因,我需要在一段合理的时间后重新启用扫描仪。我不能只是将reactivate设置为false,因为在我重新启动应用程序之前,QR扫描仪将处于非活动状态。问题是,当用户停留在另一个屏幕上时,QR扫描仪在超时后重新激活,并在不需要时尝试扫描。理想情况下,我想要做的是在用户不在扫描屏幕时停用QR扫描仪,并在用户进入扫描屏幕时使用上述参数重新激活它。有什么方法可以做到这一点吗?谢谢!
发布于 2020-03-20 15:12:38
我几乎也有同样的问题。扫描仪在显示另一个视图时不会停止扫描(使用reactivate={true})。我正在使用react导航,所以我想出了以下解决方案。
您可以使用以下命令来了解您的视图发生了什么变化focus和blur..。
this.props.navigation.addListener('focus', () => {
this.setState({viewFocused: true});
});
this.props.navigation.addListener('blur', () => {
this.setState({viewFocused: false});
});注意:将这段代码放在componentDidMount或者使用React.useEffect..。
基于状态viewFocused您可以呈现二维码扫描器。
this.state.viewFocused && (
);这有助于我解决我的问题。在显示其他视图时不进行扫描,但在再次显示该视图时进行扫描。积分到github.com上的pkyeck
发布于 2021-02-18 17:31:24
正如文档中所解释的,您可以程序化地执行此操作
{ this.scanner = node }} <-- add this
/>在您的方法中(例如,在Alert或onPress按钮中),按如下方式重新激活扫描仪:
onPress: () => {
this.scanner.reactivate()
},发布于 2021-02-25 04:49:53
与上面在功能组件或使用钩子中提到的事情相同
import React, {useEffect, useState} from 'react';
const ScannerCamera = ({navigation, route}) => {
let uuId = null;
const [viewFocused, setViewFocused] = useState(false);
useEffect(() => {
const onFocus = navigation.addListener('focus', () => {
setViewFocused(true);
});
const onBlur = navigation.addListener('blur', () => {
setViewFocused(false);
});
return {onFocus, onBlur};
}, [navigation]);
return (
viewFocused && (
)
);
};https://stackoverflow.com/questions/60318078
复制相似问题