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,客户对结果感到满意。