реагировать на навигацию, вернуться с вложенной навигацией
Stack Navigator :
- Login
- Register
- Activation
- Tab Navigator
+ Home
+ Histories
+ Cart
+ Profile
- Outlet
- Product
У меня проблема с навигацией назад, когда я нахожусь на экране продукта, я могу перейти на "экран корзины", используя navigation.navigate('Cart');
, но в "Экране тележки" и goBack()
мой экран перейду на "главный экран". Как управлятьgoBack()
с экрана стека на экран вкладок?
2 ответа
В реакции-навигации (до 5) я добился того, о чем вы говорите, передав верхнюю навигацию в качестве опоры вниз, используя настраиваемый компонент навигации, например:
// this component's navigation is replaced by upper navigation, you can send another prop if you need both navigations.
const MyComponent0 = createStackNavigator(
{
Child1: {
screen: Child1,
navigationOptions: ({navigation}) => {
return {
headerRight: (
// you can use BackButton of library with import it, I wrote my own, that time i didn't know there is a ready importable back button.
<TouchableOpacity
style={{paddingLeft: 10}}
onPress={() => navigation.toggleDrawer()}>
<Icon ios="ios-menu" android="md-menu" style={{color: '#fff'}} />
</TouchableOpacity>
),
headerTitle: <Text style={styles.whiteText}>Child1 title</Text>,
headerLeft: (
<HeaderBackButton
style={{color: '#FFF'}}
onPress={() => navigation.goBack(null)}
/>
),
};
},
},
Child2,
...
},
{
defaultNavigationOptions: {
headerTitleStyle: {
color: '#fff',
fontSize: 13,
...Platform.select({
android: {
fontFamily: ...,
},
ios: {
fontFamily: ...,
},
}),
},
headerStyle: {
backgroundColor: 'rgba(0,0,0,1)',
},
headerTintColor: 'white',
},
},
);
class MyComponent1 extends Component {
constructor() {
super();
}
static router = MyComponent0.router;
render() {
return <MyComponent0 navigation={this.props.navigation} />; // you can send like navigation1 if you need downward navigation too.
}
}
Этот код имеет старый подход, но он работает с использованием реакции-навигации до 5. Надеюсь, это вам поможет.
вы можете использовать этот метод
const goNext = () => {
navigation.navigate('componentWithDrawer', {
screen: next_screen,
params: { previous_screen: current_srceen }
}, next_screen)
navigation.toggleDrawer()
}
}
затем вернуться
const goBack = () => {
navigation.navigate('componentWithDrawer', {
screen: useRoute().params.previous_screen,
}, next_screen)
navigation.toggleDrawer()
}
}