gpt4 book ai didi

react-native - 在 React Native Navigation 中的选项卡之间切换时如何保留堆叠的屏幕

转载 作者:行者123 更新时间:2023-12-04 12:59:46 25 4
gpt4 key购买 nike

我正在使用由 createBottomTabNavigator() 创建的底部选项卡导航器并向它传递几个屏幕,每个屏幕都包含自己的堆栈导航:

const tabNavigator = createBottomTabNavigator({
TradingStack,
LendingStack,
FinanceStack,
AccountBalancesStack,
OtherStack,
},
{
tabBarComponent: props => (
<NavigationFooter />
)
}
);

我将我自己的自定义底部导航器组件传递给它,名为 <NavigationFooter /> .当 tabBarComponent被省略,使用了一个内置的底部选项卡导航器,但是我需要比这个内置解决方案提供的更多功能。问题是,当使用我的自定义标签栏时,我在各个屏幕中失去了堆栈持久性。为了澄清,让我们说我的 TradingStack screen 有几个屏幕堆叠在它上面,我打开其中一个。使用默认标签栏时,如果我切换到 LendingStack屏幕然后返回 TradingStack ,我仍然会在被推到根顶部的堆叠屏幕上 TradingStack屏幕。

但是,当使用我的自定义选项卡栏组件时,在这些选项卡/屏幕之间移动将始终将我带到每个选项卡的根目录,而不是在切换之前将我带回到选项卡所在的堆叠屏幕。这是我的自定义页脚组件:
function Footer({navigation}) {
return(
<View style={styles.tabBarStyle}>
<TouchableOpacity style={styles.tabStyle} onPress={() => navigation.navigate('Trading')} />
<TouchableOpacity style={styles.tabStyle} onPress={() => navigation.navigate('Lending')} />
<TouchableOpacity style={styles.tabStyle} onPress={() => navigation.navigate('Finance')} />
<TouchableOpacity style={styles.tabStyle} onPress={() => navigation.navigate('AccountBalances')} />
<TouchableOpacity style={styles.tabStyle} onPress={() => navigation.navigate('TabScreen')} />
</View>
);
}

const NavigationFooter = withNavigation(Footer);

如您所见,当 TouchableOpacity 之一时元素被按下,我使用 navigation.navigate()转到所需的屏幕,但是,如上所述,这将我带到屏幕的根部。我知道这基本上是明确地告诉应用程序导航到选项卡的根屏幕,但我不知道如何让选项卡“记住”它在我离开之前所在的堆叠屏幕,就像默认标签栏。

最佳答案

您可以将实际堆栈的名称传递给 navigation.navigate而不是该特定选项卡上的起始屏幕的名称,并且堆叠的屏幕应该保持不变。所以,而不是,例如

<TouchableOpacity style={styles.tabStyle} onPress={() => navigation.navigate('Trading')}/> //name of the screen

你应该通过它
<TouchableOpacity style={styles.tabStyle} onPress={() => navigation.navigate('TradingStack')}/> //name of the stack

假设 TradingTradingStack 中的起始屏幕.

关于react-native - 在 React Native Navigation 中的选项卡之间切换时如何保留堆叠的屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59876593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com