Переопределить кнопку возврата Wix React Native Navigation V2?

В настоящее время я перехожу с Wix RNN V1 на V2, и до сих пор мне удалось найти соответствующие API-интерфейсы для замены, за исключением переопределения кнопки возврата на Android.

В версии V1 мы могли передать атрибут overrideBackPress: true, а затем обрабатывать нажатия кнопки возврата вручную на соответствующем экране.

Однако в V2 я не нашел такой замены, и единственными темами, которые я смог найти, была эта ветка:

https://github.com/wix/react-native-navigation/issues/4217

Я реализовал там предложения, но навигация Wix по-прежнему автоматически закрывает экраны, даже если она должна быть перезаписана.

Какое-нибудь известное решение для этого?


person Asleepace    schedule 05.04.2019    source источник
comment
Я тоже застрял с той же проблемой. Есть ли удача в поиске решения?   -  person Mithun Raman    schedule 26.04.2019


Ответы (2)


У меня была такая же проблема, и единственный способ переопределить поведение обратного нажатия на обеих платформах - это заменить левую кнопку возврата на настраиваемую кнопку и использовать BackHandler для реакции на аппаратную кнопку в Android. Код приведен ниже.

Компонент А

//Navigate to component B from A
Navigation.push(this.props.componentId, {
component: {
    name: 'ComponentB',
    options: {
        topBar: {
            leftButtons: [{
                id: 'backPress',
                text: 'Back',
                icon: require('backbutton.png')
            }]
        },
    }
}
});

Компонент B

import React, { PureComponent } from 'react';
import { View, BackHandler } from 'react-native';
import { Navigation } from 'react-native-navigation';

export default class ComponentB extends PureComponent {

constructor(props) {
    super(props);
    Navigation.events().bindComponent(this);
}

componentDidMount() {
    BackHandler.addEventListener('hardwareBackPress', this.handleBackPress);
}

componentWillUnmount() {
    BackHandler.removeEventListener('hardwareBackPress', this.handleBackPress);
}

navigationButtonPressed({ buttonId }) {
    switch (buttonId) {
        case 'backPress': {
            this.handleBackPress();
            break;
        }
    }
}

handleBackPress = () => {
    //Custom logic

    //Go back if required
    Navigation.pop(this.props.componentId)

    //Stop the default navigation
    return true;
};

//Render component
render() {
    return (<View></View>);
}
}
person Guruparan Giritharan    schedule 19.05.2019

Вы можете использовать registerScreenPoppedListener:

Navigation.events().registerScreenPoppedListener((event) => {
    if (event.componentId === "my-screen-id") {
        // do something
    }
});
person romin21    schedule 20.08.2020