вернуться к определенному экрану вместо первого экрана реакции-нативной навигации - PullRequest
2 голосов
/ 18 апреля 2019

Когда я нажимаю кнопку "Назад" или выполняю this.props.navigation.goBack(), я возвращаюсь к моему первому экрану вместо первого экрана.

вот мои App.js, в которых реализован мой навигатор:

export default class App extends React.Component {
  render() {
      const MainNavigator = createAppContainer(createBottomTabNavigator({
          info: {
          screen: CtrlInfoStart,
          navigationOptions: { tabBarVisible: false }
      },
          mascotChoice: {
          screen: CtrlMascotChoice,
          navigationOptions: { tabBarVisible: false }
      },
          optionScreen: {
          screen: CtrlOptions,
          navigationOptions: { tabBarVisible: false }
      },
          welcomeScreen: {
          screen: CtrlWelcome,
          navigationOptions: { tabBarVisible: false }
      },
          preview: {
          screen: CtrlPreviewMap,
          navigationOptions: { tabBarVisible: false }
      },
          map: {
          screen: CtrlMap,
          navigationOptions: { tabBarVisible: false }
      },
          pointOfInterest: {
          screen: CtrlPI,
          navigationOptions: { tabBarVisible: false }
      },
          quizz: {
          screen: CtrlQuizz,
          navigationOptions: { tabBarVisible: false }
      }
      }));

    return (
    <View style={styles.container}>
        <MainNavigator/>
    </View>
    );
  }
};

Я использую this.props.navigation.navigate('SomeScreen'); для навигации между экранами и this.props.navigation.goBack() для возврата.

Ответы [ 2 ]

2 голосов
/ 18 апреля 2019

Импорт BackHandler из реагировать нативно,

in componentdidmount bind backhandler событие с использованием BackHandler.addEventListner()

посмотри,

componentDidmount=()=>{
    BackHandler.addEventListener("hardwareBackPress", this.handleBackButton);
}

componentWillUnmount = () => {
    BackHandler.removeEventListener("hardwareBackPress", this.handleBackButton);
};

  handleBackButton = () => {
    this.props.navigation.navigate('SomeScreen');
    return true;
  };

И где бы вы ни использовали goBack() измените его на navigate("ScreenName")

EDIT

за неожиданное поведение на других экранах, сделать это, в котором используется задний ход.

import {NavigationEvents} "react-navigation";

при рендеринге внутри первого компонента,

<NavigationEvents onWillFocus={this.compnentDidmount} onWillBlur={this.componentWillUnmount} />

если у вас есть другая логика в didmount и unmount, создайте отдельные методы для обоих и выполните привязку в NavigationEvents

0 голосов
/ 01 мая 2019

Я нашел решение. Вот мой код:

     export default class App extends React.Component {

      render() {
        return <AppContainer />;
      }
    };

    const stackMapPI = createStackNavigator({
        Map: {
            screen: CtrlMap,
            navigationOptions: () => ({
                header: null
            })
        },
        PI: {
            screen: MainCtrlPIQuizz,
            navigationOptions: () => ({
                header: null
            })
        }

    });

    const stackNav = createStackNavigator({
        Welcome: {
            screen: MainCtrlWelcome,
            navigationOptions: () => ({
                header: null
            })
        },
        Option: {
            screen: CtrlOptions,
            navigationOptions: () => ({
                header: null
            })
        },
        Map: {
            screen: stackMapPI,
            navigationOptions: () => ({
                header: null
            })
        }
    });

const AppContainer = createAppContainer(stackNav);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...