Как сбросить стеки при смене вкладки внутри bottomTabNavigayor?
У меня есть bottomTabNavigator на моей вкладке, и внутри каждой вкладки у меня есть стеки. Я хочу сбрасывать стек каждый раз, когда нажимаю на другую вкладку.
Вкладка Navigator-
Вкладка 1 - |_Stack Navigator
- Screen 1
- Screen 2
Вкладка 2 - |_Stack Navigator
- Screen 3
- Screen 4
Вкладка 3 - |_Stack Navigator
- Screen 5
- Screen 6
Настоящий сценарий,. Предположим, я нахожусь на вкладке 1 - я перехожу на экран 2 с экрана 1. Затем я перехожу на вкладку 2 . Теперь, если я снова нажму на вкладку 1, вместо экрана 1 отобразится экран 2 .
Подобное происходит на каждой вкладке.
Я хочу сбрасывать вкладку при каждом нажатии вкладки.
Пожалуйста помоги.
Я использую -
"зависимости": { "@response-native-community/cli": "^4.1.0", "@response-native-community/masked-view": "^0.1.6", "@response-navigation/bottom-tabs": "^5.0.5", "@response-navigation/native": "^5.0.5", "@response-navigation/stack": "^5.0.5", "react": "16.9.0", "react-native": "0.61.5", "react-native-gesture-handler": "^1.6.0", "react-native-gifted-chat": "^0.13.0", "react-native-reanimated": "^1.7.0", "react-native-safe-area-context": "^0.7.3", "react-native-screen ": "^2.0.0-beta.7", },
3 ответа
Если вы используете навигацию версии 4 или ниже, то у меня есть очень простой способ сделать это.
tabBarOnPress:({ navigation }) => {
navigation.navigate(HomeStack,{screen:navigation.state.routes[0].routeName});
navigation.popToTop();
},
Обновите последнюю версию response-navigation и ее зависимостей и используйте это решение, это сработало для меня.
<AppTabs.Screen
name="TabScreen1"
listeners={({ navigation }) => ({
tabPress: () => {
navigation.navigate('Main1', { screen: 'Main2' });
},
})}
/>
Вы можете переопределить tabBarOnPress, чтобы получить контроль над нажатием вкладки и сбросить стек вручную или использовать другие уловки.
Возможное решение должно быть
navigationOptions: ({ navigation }) => ({
tabBarOnPress: ({ scene, jumpToIndex }) => {
const { route, focused, index } = scene;
if (focused) {
if (route.index > 0) {
const { routeName, key } = route.routes[1]
navigation.dispatch(NavigationActions.back({ key }))
}
} else {
jumpToIndex(index);
}
},
});
Возможно, вам потребуется обновить этот код для версии v5. (То же самое касается решений ниже)
Дополнительные решения здесь