How to change back button route in react navigation

☆樱花仙子☆ 提交于 2020-01-02 07:02:13

问题


i am using react-navigation (stack-navigation). i want to change my header back button icon route.

  1. Home
  2. BookTicket
  3. MyBookings

    these are the screens i have in my project.Now when i click header back button in MyBookings screen it should route to Home Screen.


回答1:


There must be back button in default if your stackNavigator stack is properly configured.

But if you would like to replace the default button just add headerLeft and pass your custom component Screen Navigation Options in the page you want to change the back button handler

CreateAccountScreen.navigationOptions = ({navigation}) => ({
  headerStyle: styles.headerStyle,
  title: 'Create Account',
  headerTintColor: '#fefefe',
  headerTitleStyle: styles.headerTitleStyle,
  headerLeft: {()=>(
          <Icon name="chevron-left"
                onPress={() => navigation.goBack(null)}
                size={35} color="white"/>
       )}
});



回答2:


If you don´t want to use custom back buttons (e. g. to avoid dealing with the different "native" button designs), there is also the possibility to reset the navigation state. In your case like this:

import { NavigationActions } from 'react-navigation';

const resetAction = NavigationActions.reset({
  index: 2,
  actions: [
    NavigationActions.navigate({ routeName: 'Home' }),
    NavigationActions.navigate({ routeName: 'BookTicket' }),
    NavigationActions.navigate({ routeName: 'MyBookings' }),
  ],
});
this.props.navigation.dispatch(resetAction);

This way you just set a stack of navigations and let it jump to the index position.

This setup must be done at the departing scene, so that in the next scene the back button works as expected.

But I prefer this way anyway, because it allows to maintain the default look of the header and keeps the stack clean. If you use navigation.navigate instead of navigation.back the stack becomes totally wrong for the back button.




回答3:


So, the default functionality of React Navigation is:- If you press the Back Button on Mybookings screen, it will take you to previous screen i.e, BookTicket screen. To override that you could do something like this on MyBookings screen:-

import { HeaderBackButton } from 'react-navigation';
static navigationOptions = ({navigation}) => {
  return{
    headerLeft:(<HeaderBackButton onPress={()=>{navigation.navigate('Home')}}/>)
 }
}


来源:https://stackoverflow.com/questions/45994430/how-to-change-back-button-route-in-react-navigation

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!