在这种情况下,可以通过深度链接打开一个屏幕。有一个<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
堆栈中,它无法处理参数)。
我能做些什么来纠正导航的行为?