React native 设置';背面';在嵌套堆栈之间导航后返回上一屏幕的操作
给定两个堆栈:React native 设置';背面';在嵌套堆栈之间导航后返回上一屏幕的操作,react-native,react-navigation,React Native,React Navigation,给定两个堆栈: Parent Stack - Stack A First Second - Stack B One Two 我需要从第一个导航到第一个。让我这样做: navigation.navigate('Stack B', { screen: 'One' } ) 现在我在One,我希望“后退”按钮将我送回上一个屏幕(第一个)。但是,后退按钮将我发送到当前堆栈的顶部(堆栈B),而不是上一个屏幕 我可以通
Parent Stack
- Stack A
First
Second
- Stack B
One
Two
我需要从第一个
导航到第一个
。让我这样做:
navigation.navigate('Stack B', {
screen: 'One'
}
)
现在我在One
,我希望“后退”按钮将我送回上一个屏幕(第一个
)。但是,后退按钮将我发送到当前堆栈的顶部(堆栈B
),而不是上一个屏幕
我可以通过在导航
调用中将当前屏幕和一些数据作为参数传递,然后在One
中对标题
执行一些操作,例如:
// Navigate from First --> One
navigation.navigate('Stack B', {
screen: 'One',
params: {
screenToGoBackTo: {
name: 'First',
parent: 'Stack A'
}
}}
);
然后通过构建向后导航路径,在One
中设置标题后退按钮:
// Call this from the header back button.
// Also set the header back button title from props.screenToGoBackTo.name.
navigation.navigate(props.screenToGoBackTo.parent, { props.screenToGoBackTo.name });
但这是复杂而脆弱的(稍后屏幕无法在堆栈中移动)
在通过嵌套导航器导航后,是否有一种简单的方法来设置“后退”行为(和标题!)
编辑:我正在使用
“@react navigation/native”:“^5.6.0”
我想就像@Andris Ladizans所说的,首先你可能需要检查你是否真的需要两个堆栈。如果是,那么其中一个解决方案可能是在多个堆栈中添加所需的屏幕(使用不同的名称)。我不确定这是否是正确的(最佳的)做法,但是是的,我在我的一个项目(使用react navigation v3.x)中就是这样做的,而且很有效。因此,在您的情况下,堆栈将如下所示:
Parent Stack
- Stack A
First
Second
OneA
- Stack B
OneB
Two
你使用哪个版本的
react导航?@HagaiHarari我使用的是5.6。react导航建议不要将导航视为“组织”代码的一种方式。如果我是你,我会“问我自己”我需要两叠吗?也许我实际上只需要一个堆栈。我真的不知道应用程序的完整细节,但在您描述的问题中只使用一个堆栈实际上是最简单的解决方案。我也遇到过同样的问题,并像您一样通过在navigate()中传递一个反向链接参数来修复它。这不是最佳实践,但成功地修复了一路上产生的bug,客户对结果感到满意。