【发布时间】:2020-12-01 11:09:21
【问题描述】:
我试图阻止用户在 React Native 中录制视频时通过 Android 后退按钮或手势返回。根据 React Navigation 的 documentation,它应该使用 beforeRemove 事件监听器来处理。但是返回时永远不会触发该事件。
我尝试使用blur,但它被触发了,但由于此事件没有preventDefault() 方法,因此在这种情况下不可用。
反应导航 - v5.x
React Native - 0.63.2
这是我要实现的屏幕的示例代码
const VideoCapturePage = ({navigation}) => {
const [isRecording, setIsRecording] = useState(false);
useEffect(() => {
navigation.addListener('beforeRemove', (e) => {
if (!isRecording) {
return;
}
e.preventDefault();
Alert.alert(
'Unsaved changes',
'There are unsaved changes. Please chose what you want.',
[
{
text: 'Go back',
onPress: () => {
navigation.dispatch(e.data.action);
},
},
{
text: 'Cancel',
onPress: () => {
console.log('cancelled');
},
},
{
text: 'Continue to Edit',
onPress: () => {
console.log('continue');
},
},
],
{
cancelable: false,
},
);
});
}, [navigation, isRecording]);
return (
<View style={styles.container}>
<VideoCamera
isRecording={isRecording}
setIsRecording={setIsRecording}
/>
</View>
);
};
【问题讨论】:
-
您使用的是哪个版本的 React Navigation?并非在 v5 的所有版本中都可用,仅在 v5.7+ 中可用。
-
是的,我使用的是 Reac Navigation 版本 = v5.7.x 上可用
-
我刚刚为文档创建了一个拉取请求以显示最低版本。
标签: android react-native react-navigation react-navigation-stack