Вы можете сделать следующее:
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
, объясняется в документации по навигации по реакции:
Возвращение true из onBackPress означает, что мы обработали событие, и слушатель реакции-навигации не будет вызван, поэтому экран не появится. Возврат false вызовет всплытие события, и на экране появится прослушиватель response-navigation.
Если вы хотите узнать больше, прочтите документацию здесь: https://reactnavigation.org/docs/custom-android-back-button-handling/.