Я столкнулся с той же проблемой, похоже, что реализация Backhandler.android.js не верна, файл можно найти здесь 1002 *, в этом файле const subscription = Array.from (_backPressSubscription.values ()). Reverse (); кусок кода всегда возвращает массив длины 0, поэтому переменная invokeDefault всегда остается истинной и закрывает приложение, вы можете исправить это, обработав поведение кнопки возврата через собственную реализацию.
В службе навигации добавьте этот метод
import { NavigationActions, StackActions } from 'react-navigation';*
let navigator;
function setTopLevelNavigator(navigatorRef) {
navigator = navigatorRef;
}
function pop() {
navigator.dispatch(StackActions.pop());
}
export default {
pop,
setTopLevelNavigator
};
Вам нужно установить навигатор верхнего уровня в вашем app.js, как в этом операторе return метода int render
<AppNavigator //Replace it with your navigator
ref={navigatorRef => {
NavigationService.setTopLevelNavigator(navigatorRef);
}}
onNavigationStateChange={(prevState, currentState) => {
this.setState({ currentState });
}}
/>
Для работы с кнопкой «Назад» добавьте эти вещи в ваш app.js
импорт NavigationService также
import {
BackHandler,
DeviceEventEmitter
} from 'react-native';
В componentDidMount добавьте эти
componentDidMount() {
BackHandler.addEventListener('hardwareBackPress', this.handleHardwareBack);
}
В компонентWillUnmount добавьте эти
componentWillUnmount() {
BackHandler.removeEventListener('hardwareBackPress',this.handleHardwareBack);
}
Теперь работаем с кнопкой возврата оборудования
handleHardwareBack = () => {
if (!isUndefined(this.state.currentState)) {
const mainRouteIndex = this.state.currentState.index;
const mainRoute = this.state.currentState.routes[mainRouteIndex];
const subRouteIndex = mainRoute.index;
if (subRouteIndex === 0) {
console.log(
'the screen name is ----> ',
mainRoute.routes[subRouteIndex].routeName
);
this.toggleExitModal(); //you can place any dialog if you want to show
return true;
}
NavigationService.pop();
return true;
}
console.log('Back Button is handled in the respective page seperately');
};
return true говорит о том, что мы собираемся обработать функциональность кнопки назад вручную, возвращение false приведет к выходу из приложения, поскольку по умолчанию это аппаратная кнопка возврата, закрывающая приложение: (
Надеюсь, это поможет вам