在这种情况下,可以通过深层链接打开屏幕。有一个<BackButton />
组件,我希望按钮的行为如下:
navigator.navigate
打开,请返回。这样的导航器结构
在一开始,我写了这样的代码:
const onBackButtonPress = useCallback(() => {
if (navigation.canGoBack()) {
navigation.goBack()
} else {
navigation.navigate('Tab', { screen: 'Home' })
}
), [navigation])
此代码有效,但是使用navigation.navigate()
功能会产生推入效果(新屏幕来自右侧),而不是返回(新屏幕来自左侧)。
然后我尝试使用navigation.replace()
和navigation.reset()
navigation.reset({
index: 0,
routes: [{ name: 'Tab', state: { routes: [{ name: 'Home' }, { name: 'Personal' }] } }],
})
导航器似乎无法处理这条路线(我认为这是因为我们现在处于Main
堆栈中,并且它无法处理参数)。
我该如何纠正导航行为?
答案 0 :(得分:0)
导航器似乎无法处理这条路线(我认为这是因为我们现在在Main堆栈中,并且它无法处理参数)。
也许与navigate
不同,在这种情况下,navigation
在使用replace
和reset
时无法处理此路由,因此我尝试使用其父导航器,它只是正是我想要的行为!
const onBackButtonPress = useCallback(() => {
if (navigation.canGoBack()) {
navigation.goBack()
} else {
const parentNaigator = navigation.dangerouslyGetParent()
parentNaigator?.replace('Tab', { screen: 'Home' })
}
), [navigation])
根据official document,导航动作旨在由当前导航器处理,如果无法处理,则会冒出气泡。也许是replace
和reset
的错误。