路线
import React from 'react';
import { createStackNavigator } from '@react-navigation/stack';
import { OrderProvider } from '../contexts/order';
import Home from '../pages/Home';
import Checkout from '../pages/Checkout';
import Success from '../pages/Checkout/success';
const AppStack = createStackNavigator();
const AppRoutes = () => (
<OrderProvider>
<AppStack.Navigator screenOptions={{ headerShown: false }}>
<AppStack.Screen name="Home" component={Home} /> <-- here
<AppStack.Screen name="Checkout" component={Checkout} />
<AppStack.Screen name="Success" component={Success} /> <--- here
</AppStack.Navigator>
</OrderProvider>
);
export default AppRoutes;
import React from 'react';
import { View} from 'react-native';
const Success = () => {
return (
<View />
);
};
export default Success;
答案 0 :(得分:0)
您可以执行以下操作:
const Home = () => {
useFocusEffect(
React.useCallback(() => {
const onBackPress = () => {
return true;
};
BackHandler.addEventListener('hardwareBackPress', onBackPress);
return () =>
BackHandler.removeEventListener('hardwareBackPress', onBackPress);
}, []),
);
// ...
};
const Success = ({navigation}) => {
useFocusEffect(
React.useCallback(() => {
const onBackPress = () => {
navigation.navigate('Home');
return true;
};
BackHandler.addEventListener('hardwareBackPress', onBackPress);
return () =>
BackHandler.removeEventListener('hardwareBackPress', onBackPress);
}, []),
);
// ...
};
我已经对其进行了设置,以使在Home
事件被调用时返回true
不会在hardwareBackPress
屏幕上单击返回。
在Success
屏幕上,我导航回到Home
。
我认为这是您通过阅读问题来寻找的行为。
请务必不要忘记从中导入useFocusEffect
,这一点很重要
随时随地使用反应导航:
import { useFocusEffect } from '@react-navigation/native';
在反应导航文档中说明了何时在true
事件处理函数中返回false
或hardwareBackPress
的情况:
从onBackPress返回true表示我们已经处理了 事件,并且不会调用react-navigation的监听器,因此不会 弹出屏幕。返回false将导致事件冒泡 反应导航的侦听器将弹出屏幕。
如果您想了解更多信息,请阅读以下文档:https://reactnavigation.org/docs/custom-android-back-button-handling/。