使用反应导航(https://reactnavigation.org/docs/en/navigating.html)并具有以下形式的导航设置:
bottomTabNavigator
stackNavigatorA
screenA1
screenA2
(with initialRouteName=screenA1)
stackNavigatorB
screenB1
screenB2
screenB3
screenB4
(with initialRouteName=screenB1)
screenA1基本上看起来像
<View>
<Button title='to A2' onPress={this.props.navigation.navigate('screenA2')}/>
</View>
和screenA2
<View>
<Button title='to B3' onPress={this.props.navigation.navigate('screenB3')}/>
</View>
B屏幕看起来像
// screenB1
<View>
<Button title='to B2' onPress={this.props.navigation.navigate('screenB2')}/>
</View>
// screenB2
<View>
<Button title='to B3' onPress={this.props.navigation.navigate('screenB3')}/>
</View>
// screenB3
<View>
<Button title='to B4' onPress={this.props.navigation.navigate('screenB4')}/>
</View>
// screenB4
<View>
</View>
使用此设置,我可以从B1-> B2-> B3-> B4导航并成功地向下堆叠,并且可以从A1-> A2导航并成功地向下堆叠。但是,当尝试从A1-> A2-> B3(或-> B4)导航并返回时,它最终会采用路径A1到A2到B3回溯B1(而不是返回A2)。即使将<Button title='FIXME: goback workaround' onPress={() => {this.props.navigation.goBack()}}/>
添加到screenB3也无济于事(在这里,我期望它可以返回到先前的屏幕)。
有人可以解释为什么会这样吗?不了解this.props.navigation.navigate()
在这种情况下正在做什么?关于文档的任何事情?我认为使用默认的后退按钮只会在用于到达任何给定屏幕的堆栈中反向移动。
答案 0 :(得分:1)
TLDR :
最终创建了一个单独的导航。菜单
stackNavigatorB'
screenB3
screenB4
也要设置表格
stackNavigatorA
screenA1,
screenA2,
stackNavigatorB'
stackNavigatorB
screenB1,
screenB2,
stackNavigatorB'
这使我可以在B导航器B和B3导航器之间使用B3和B4屏幕在每个堆栈中独立地浏览不同数据。
其他事情尝试和失败(出于信息目的):
goBack
和Push
遵循堆栈流程,而navigate
则允许您转到任何屏幕,而不管它们的路线如何。
将导航器设置为
stackNavigatorA [ 屏幕A1, 屏幕A2, 屏幕B3, screenB4]
stackNavigatorB [ 屏幕B1, 屏幕B2, 屏幕B3, screenB4]
我仍然会从B3返回(无论我是从A1还是B1到达那里)将我带回到B1的行为。我现在想,堆栈可以导航到其所有分配的屏幕,并以它们返回的方式goBack()而不相互交互(当只是使用默认的后退按钮来追溯“向下”堆栈时),因为它们在自己的堆栈中分配的屏幕中使用此“子导航”(如上一个要点所述)。
**此答案的某些部分来自react-navigate不和谐聊天中的讨论。