react-native 路由5.x配置

1、安装
npm install @react-navigation/native (or yarn add @react-navigation/native)
npm install react-native-reanimated react-native-gesture-handler react-native-screens react-native-safe-area-context @react-native-community/masked-view(or yarn add react-native-reanimated react-native-gesture-handler react-native-screens react-native-safe-area-context @react-native-community/masked-view)
npm install @react-navigation/stack(or yarn add @react-navigation/stack)
npm install @react-navigation/bottom-tabs(or yarn add @react-navigation/bottom-tabs)
npm install react-native-vector-icons(或者 yarn add react-native-vector-icons)
上面的那个icons如果安装有问题可以看一下我的这个文章点击跳转
2、项目结构:

在这里插入图片描述

3、开始配置
import * as React from 'react';
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
import Ionicons from 'react-native-vector-icons/Ionicons';
import Test from './src/test'
import Home from './src/home'
import Block from './src/block'
import News from './src/news'
const Stack = createStackNavigator();
const Tab = createBottomTabNavigator();

function MyStack() {
    return (
        <Stack.Navigator>
            <Stack.Screen name="Home" component={Home} />
            <Stack.Screen name="News" component={News} />
        </Stack.Navigator>
    );
}
function MyStackTwo() {
    return (
        <Stack.Navigator>
            <Stack.Screen name="Test" component={Test} />
        </Stack.Navigator>
    );
}
export default function App() {
    return (
        <NavigationContainer>
            <Tab.Navigator
                screenOptions={({ route }) => ({
                    tabBarIcon: ({ focused, color, size }) => {
                        let iconName;
                        if (route.name === 'MyStack') {
                            iconName = focused ? 'ios-information-circle' : 'ios-information-circle-outline';
                        } else if (route.name === 'MyStackTwo') {
                            iconName = focused ? 'ios-list-box' : 'ios-list';
                        }else if (route.name === 'Block') {
                            iconName = focused ? 'ios-airplane' : 'ios-appstore';
                        }
                        return <Ionicons nae={iconName} size={size} color={color} />;
                    },
                })}
                tabBarOptions={{
                    activeTintColor: 'tomato',
                    inactiveTintColor: 'gray',
                }}
            >
                <Tab.Screen name="MyStack" component={MyStack} />
                <Tab.Screen name="MyStackTwo" component={MyStackTwo} />
                <Tab.Screen name="Block" component={Block} />
            </Tab.Navigator>
        </NavigationContainer>
    );
}
4、运行效果

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React Native 中,可以使用第三方来实现路由拦截。一个常用的React Navigation,它提供了强大的导航和路由管理功能。 要实现路由拦截,可以使用 React Navigation 提供的导航守卫功能。导航守卫可以在路由变化前或后执行自定义的逻辑。 以下是一个简单的示例,演示如何在 React Native 中使用 React Navigation 实现路由拦截: 1. 首先,确保已经安装了 React Navigation: ``` npm install @react-navigation/native ``` 2. 安装所需的导航器(例如 Stack Navigator): ``` npm install @react-navigation/stack ``` 3. 创建一个名为 `NavigationService.js` 的新文件,用于导航拦截逻辑: ```javascript import { NavigationActions } from '@react-navigation/compat'; let navigator; function setTopLevelNavigator(navigatorRef) { navigator = navigatorRef; } function navigate(routeName, params) { navigator.dispatch( NavigationActions.navigate({ routeName, params, }) ); } // 添加其他需要的导航方法 export default { navigate, setTopLevelNavigator, }; ``` 4. 在根组件中设置导航器并引用 `NavigationService.js`: ```javascript import { NavigationContainer } from '@react-navigation/native'; import { createStackNavigator } from '@react-navigation/stack'; import NavigationService from './NavigationService'; const Stack = createStackNavigator(); function App() { return ( <NavigationContainer ref={navigatorRef => { NavigationService.setTopLevelNavigator(navigatorRef); }}> <Stack.Navigator> {/* 添加其他屏幕 */} </Stack.Navigator> </NavigationContainer> ); } export default App; ``` 5. 在需要拦截的组件中使用 `NavigationService.js`: ```javascript import NavigationService from './NavigationService'; // 在需要拦截的地方调用 `NavigationService.navigate` 方法 NavigationService.navigate('ScreenName'); ``` 通过这种方式,你可以在路由变化前后执行自定义的逻辑,例如验证用户权限、处理特定的跳转逻辑等。需要注意的是,这只是一个简单的示例,你可以根据具体的需求进行定制和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值