В этом случае экран можно открыть с помощью глубоких ссылок. Есть компонент <BackButton />
, и я sh поведую кнопку следующим образом:
- , если этот экран был открыт с помощью
navigator.navigate
, тогда go back. - , если этот экран был открыт с помощью глубоких ссылок, затем go на главный экран.
Структура навигатора, подобная этой
- Root (навигатор стека)
- Вкладка (нижняя вкладка навигатора)
- Домашняя страница
- Личная информация
- Главная (навигатор стека)
Вначале я написал такой код:
const onBackButtonPress = useCallback(() => {
if (navigation.canGoBack()) {
navigation.goBack()
} else {
navigation.navigate('Tab', { screen: 'Home' })
}
), [navigation])
Этот код работает, однако использование функции navigation.navigate()
вызывает эффект pu sh (новый экран появляется с правого края), а не go back (новый экран появляется с левого края).
Затем я попытался использовать navigation.replace()
и navigation.reset()
navigation.reset({
index: 0,
routes: [{ name: 'Tab', state: { routes: [{ name: 'Home' }, { name: 'Personal' }] } }],
})
И, похоже, навигатор не справился с этим маршрутом (я думаю, это потому, что мы сейчас в стеке Main
, и он не может обработать параметры).
Что я могу сделать, чтобы исправить поведение навигации?