如何在 React Native 中从 DRAWER NAVIGATION 导航到 BOTTOM TAB BAR NAVIGATION? [英] How to Navigate from DRAWER NAVIGATION to BOTTOM TAB BAR NAVIGATION in react native?

查看:64
本文介绍了如何在 React Native 中从 DRAWER NAVIGATION 导航到 BOTTOM TAB BAR NAVIGATION?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这个网址:https://streamable.com/no6anz,是一个展示我的应用导航的视频,我希望能够在我的标签导航中从抽屉屏幕导航到特定标签屏幕.

this url: https://streamable.com/no6anz, is a video showcasing my app's navigation, I want the ability to navigate from a Drawer screen to a SPECIFIC Tab Screen in my Tab Navigation.

例如:如果我按下消息"抽屉项目,我想导航到我的帐户 标签 屏幕标签导航器中.

For example: If i pressed let's say the 'Messages' drawer item, i would like to navigate to the My Account tab screen in the tab navigator.

到目前为止,我的实施还不是最好的:

So far my implementation has not been the best:

import React, {Fragment, Component} from 'react';
import {View, StyleSheet} from 'react-native';
import {createBottomTabNavigator} from '@react-navigation/bottom-tabs';
import {createDrawerNavigator} from '@react-navigation/drawer';
import {createStackNavigator} from '@react-navigation/stack';

import Home from '../Views/HomeView';
import Cart from '../Views/CartView';
import MyAccount from '../Views/MyAccountView';
import Sidebar from '../Views/Sidebar';

import HomeIconColor from './CustomSVGIcons/HomeIconColor';
import CartIconColor from './CustomSVGIcons/CartIconColor';
import PersonIconColor from './CustomSVGIcons/PersonIconColor';
import MenuIconColor from './CustomSVGIcons/MenuIconColor';

import Contact from '../Views/screens/Contact';
import Messages from '../Views/screens/Messages';
import {
  NavigationContainer,
  DrawerActions,
  useNavigation,
} from '@react-navigation/native';
import {BottomTabBar} from '@react-navigation/bottom-tabs';
import Login from '../Views/screens/Login';
import {create} from 'react-test-renderer';
import {createSwitchNavigator} from '@react-navigation/compat';

const Tab = createBottomTabNavigator();
const Drawer = createDrawerNavigator();
const Stack = createStackNavigator();
const Switch = createSwitchNavigator();

class Navigator extends Component {
  constructor() {
    super();
    this.state = {};
  }
  render() {
    return (
      <NavigationContainer>
        <MyDrawerNavigation />
      </NavigationContainer>
    );
  }
}
const MyTabs = (props) => {
  const navigation = useNavigation();
  const Tab = createBottomTabNavigator();
  return (
    <Tab.Navigator
      screenOptions={({route}) => ({
        tabBarButton: ['Contact', 'Route2ToExclude'].includes(route.name)
          ? () => {
              return null;
            }
          : undefined,
      })}>
      <Tab.Screen
        name="Home"
        component={Home}
      />
      <Tab.Screen
        name="MyAccount"
        component={MyAccount}
      />
      <Tab.Screen
        name="Cart"
        component={Cart}
      />
      <Tab.Screen
        name="Sidebar"
        component={Sidebar}
      />
      <Tab.Screen name="Contact" component={Contact} />
    </Tab.Navigator>
  );
};
const MyDrawerNavigation = () => {
  return (
    <Drawer.Navigator drawerPosition={'right'}>
      <Drawer.Screen
        name="Home"
        component={MyTabs}
        initialParams={{screen: 'Home'}}
      />
      <Drawer.Screen
        name="My Account"
        component={MyTabs}
        initialParams={{screen: 'MyAccount'}}
      />
    </Drawer.Navigator>
  );
};    
const styles = StyleSheet.create({
      tabNav: {
        backgroundColor: '#000000',
      },
    });

export default Navigator;

推荐答案

SOLVED!:

经过广泛深入的研究;我已经使用 onPress 处理程序创建了自己的自定义抽屉.

After extensively further researching; I have created my own custom Drawer, with the onPress handler.

onPress 处理程序启动导航到指定屏幕的操作.

The onPress handler initiates the action for navigation to the specified screens.

注意:您必须将导航引用传递给顶级导航容器.您还必须将此相同的引用传递到您的自定义抽屉模块(或任何相关模块)

NOTE: you will have to pass in the navigation ref to the top-level navigation container. You will also have to pass this same reference into your custom drawer module (or any module in that concern)

这是我的自定义抽屉组件:

here's my custom drawer component:

import React, {Component} from 'react';
import {Text, View, Button, StyleSheet} from 'react-native';

import {useNavigation, CommonActions} from '@react-navigation/native';
import * as rootNavigator from '../components/rootNavigator';

const CustomDrawer = () => {
  return (
    <View style={styles.container}>
      <Button
        title="My Account"
        onPress={() => rootNavigator.navigate('MyAccount')}
      />
      <Button
        title="Contact"
        onPress={() => rootNavigator.navigate('Contact')}
      />
      <Button title="Cart" onPress={() => rootNavigator.navigate('Cart')} />
    </View>
  );
};
const styles = StyleSheet.create({
  container: {
    flex: 1,
    padding: 30,
  },
});
export default CustomDrawer;

这是我返回 DrawerNavBar 的代码:

here's the code where I return the DrawerNavBar:

const MyDrawerNavigation = () => {
  return (
    <NavigationContainer ref={navigationRef}>
      <Drawer.Navigator
        drawerPosition={'right'}
        drawerContent={(props) => <CustomDrawer {...props} />}>
        <Drawer.Screen name="Tabs" component={MyTabs} />
        <Drawer.Screen name="Contact" component={Contact} />
      </Drawer.Navigator>
    </NavigationContainer>
  );
};

这篇关于如何在 React Native 中从 DRAWER NAVIGATION 导航到 BOTTOM TAB BAR NAVIGATION?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆