React-navigation 如何将 StackNavigator 放入 TabRouter 屏幕
React-navigation How to put StackNavigator in TabRouter screen
我在使用 react-navigation
时遇到了一些问题。我想要一个自定义标签栏,其中一个屏幕由 StackNavigator
.
组成
所以基本上,我有
Tab
-- StackNavigator
-- Dashboard (main)
-- Wallet
-- Etc...
-- Other tabs...
为了制作我的自定义标签,我使用了 TabRouter
、createNavigationContainer
和 createNavigator
const Tabs = TabRouter(
{
Main: {
screen: Main,
},
},
{
initialRouteName: 'Main',
tabBarComponent: TabView.TabBarBottom,
swipeEnabled: false,
animationEnabled: false,
backBehavior: 'none',
},
);
const CustomTabView = ({ router, navigation }) => {
const { routes, index } = navigation.state;
const ActiveScreen = router.getComponentForState(navigation.state);
return (
<View style={{ flex: 1 }}>
<ActiveScreen
navigation={addNavigationHelpers({
...navigation,
state: routes[index],
})}
/>
<View style={styles.tabContainer}>
{routes.map(route => (
<TouchableOpacity // custom tab items
key={route.routeName}
onPress={() => navigation.navigate(route.routeName)}
>
<TabItem />
</TouchableOpacity>
))}
</View>
</View>
);
};
const TabBar = createNavigationContainer(createNavigator(Tabs)(CustomTabView));
主要是:
const Main = StackNavigator({
Dashboard: Dashboard,
Wallet: Wallet,
...
}, { initialRouteName: 'Dashboard' });
但这不是因为 Dashboard 必须声明一个屏幕。
我做错了什么?我不知道。我们如何将 StackNavigator 放在 TabBar 屏幕中?
幸运的是,这很容易。
StackNavigator
(或任何其他导航器)returns 是 React 组件。这意味着您可以将它用作任何其他路由的 screen
组件。
因此,您的路线之一 screen
将是 StackNavigator
。
示例代码
const Tabs = TabNavigator(
{
Main: {
screen: StackNavigator({
Dashboard: {
screen: Dashboard,
}
Wallet: {
screen: Wallet,
}
}),
},
},
{
initialRouteName: 'Main',
tabBarComponent: TabView.TabBarBottom,
swipeEnabled: false,
animationEnabled: false,
backBehavior: 'none',
},
);
我在使用 react-navigation
时遇到了一些问题。我想要一个自定义标签栏,其中一个屏幕由 StackNavigator
.
所以基本上,我有
Tab
-- StackNavigator
-- Dashboard (main)
-- Wallet
-- Etc...
-- Other tabs...
为了制作我的自定义标签,我使用了 TabRouter
、createNavigationContainer
和 createNavigator
const Tabs = TabRouter(
{
Main: {
screen: Main,
},
},
{
initialRouteName: 'Main',
tabBarComponent: TabView.TabBarBottom,
swipeEnabled: false,
animationEnabled: false,
backBehavior: 'none',
},
);
const CustomTabView = ({ router, navigation }) => {
const { routes, index } = navigation.state;
const ActiveScreen = router.getComponentForState(navigation.state);
return (
<View style={{ flex: 1 }}>
<ActiveScreen
navigation={addNavigationHelpers({
...navigation,
state: routes[index],
})}
/>
<View style={styles.tabContainer}>
{routes.map(route => (
<TouchableOpacity // custom tab items
key={route.routeName}
onPress={() => navigation.navigate(route.routeName)}
>
<TabItem />
</TouchableOpacity>
))}
</View>
</View>
);
};
const TabBar = createNavigationContainer(createNavigator(Tabs)(CustomTabView));
主要是:
const Main = StackNavigator({
Dashboard: Dashboard,
Wallet: Wallet,
...
}, { initialRouteName: 'Dashboard' });
但这不是因为 Dashboard 必须声明一个屏幕。
我做错了什么?我不知道。我们如何将 StackNavigator 放在 TabBar 屏幕中?
幸运的是,这很容易。
StackNavigator
(或任何其他导航器)returns 是 React 组件。这意味着您可以将它用作任何其他路由的 screen
组件。
因此,您的路线之一 screen
将是 StackNavigator
。
示例代码
const Tabs = TabNavigator(
{
Main: {
screen: StackNavigator({
Dashboard: {
screen: Dashboard,
}
Wallet: {
screen: Wallet,
}
}),
},
},
{
initialRouteName: 'Main',
tabBarComponent: TabView.TabBarBottom,
swipeEnabled: false,
animationEnabled: false,
backBehavior: 'none',
},
);