RN中的路由,底部导航栏和路由的传参。 一期

安装主库

npm i react-navigation --save

安装主库依赖的第三方库

npm i react-native-gesture-handler --save
npm i react-native-reanimated --save

根据项目需要引入各导航组件的库

npm i react-navigation-stack --save
npm i react-navigation-tabs --save
npm i react-native-safe-area-context --save
npm i @react-native-community/masked-view --save

以上步骤操作完成后就可以进入代码时间了!

1.可以在根目录下创建一个储存代码的文件夹:如screens文件夹;
2.在screens文件夹下创建一个appRootStack文件夹下方只有一个index.js文件,来放置底部的tabBar;代码如下:
import React from 'react';
import { Image, StyleSheet } from 'react-native';
import { createBottomTabNavigator } from 'react-navigation-tabs';
import { createStackNavigator } from 'react-navigation-stack';
import { createAppContainer } from 'react-navigation';
// 引入页面
import MyAppIndex from '../MyApp';
import TaskIndex from '../Task';
import AppCenterIndex from '../AppCenter';
import UserInfoIndex from '../UserInfo';

// 引入每个tabBar下边的routes
import MyAppStackNav from '../MyApp/routes';

const TabNavigator = createBottomTabNavigator({
    MyAppIndex: {
        screen: MyAppIndex,
        navigationOptions: {
            tabBarLabel: '首页',
            tabBarIcon: ({ tintColor }) => (
                <Image
                    source={require('../resources/images/tab1.png')}
                    style={[styles.image, { tintColor }]} // 设置图标的颜色
                />
            ),
        },
    },
    TaskIndex: {
        screen: TaskIndex,
        navigationOptions: {
            tabBarLabel: '首页1',
            tabBarIcon: ({ tintColor }) => (
                <Image
                    source={require('../resources/images/tab2.png')}
                    style={[styles.image, { tintColor }]}
                />
            ),
        },
    },
    AppCenterIndex: {
        screen: AppCenterIndex,
        navigationOptions: {
            tabBarLabel: '首页2',
            tabBarIcon: ({ tintColor }) => (
                <Image
                    source={require('../resources/images/tab3.png')}
                    style={[styles.image, { tintColor }]}
                />
            ),
        },
    },
    UserInfoIndex: {
        screen: UserInfoIndex,
        navigationOptions: {
            tabBarLabel: '首页3',
            tabBarIcon: ({ tintColor }) => (
                <Image
                    source={require('../resources/images/tab5.png')}
                    style={[styles.image, { tintColor }]}
                />
            ),
        },
    },
},
{
    navigationOptions: {
    	headerShown: false,
        //header: null, 这里不用他的原因是,会报出警告
    },
    tabBarOptions: {
        activeTintColor: '#435C71', // 设置选中tab的时候的颜色
        inactiveTintColor: '#BCC3CA', // 设置未选中tab的颜色
        style: {bottom: -35}, // 设置整个tabBar的样式
    },
});

const styles = StyleSheet.create({
    image: {
        width: 24,
        height: 24,
    },
});

const stackRouterMap = {
    TabNavigator,
    // 下边这些分别是每个tabbar里边的页面及路径
    ...MyAppStackNav,
};

const RootStack = createStackNavigator(stackRouterMap);

const AppContainer = createAppContainer(RootStack);

export default AppContainer;
3.将上述步骤2中暴露的,在根目录下的app.js中引入,代码如下:
import React, { Component } from 'react';
import {
  SafeAreaView,
  StyleSheet,
  StatusBar,
} from 'react-native';
import AppContainer from './source/appRootstack';

class App extends Component {
  render() {
    return (
        <SafeAreaView style={{flex:1}}>
        	<StatusBar translucent backgroundColor="transparent" />
            <AppContainer />
        </SafeAreaView>
    );
  }
}

const styles = StyleSheet.create({
  
});

export default App;
4.展示效果

在这里插入图片描述

5.下期介绍头部导航和路由传参

https://blog.youkuaiyun.com/Jump_Monkey/article/details/103993403

### React Native路由的继承与数据传递 在 React Native 开发中,路由导航是非常重要的部分。通过使用 `react-navigation` 库,可以方便地管理页面之间的跳转以及数据的传递。 #### 数据传递的方式 当从一个屏幕导航到另一个屏幕,可以通过参数的形式将数据传递给目标屏幕。这通常通过 `navigation.navigate` 方法完成。以下是具体实现: ```javascript // 导航并传递数据 this.props.navigation.navigate('TargetScreen', { paramKey: 'paramValue', }); ``` 在目标屏幕上,可以通过 `route.params` 来获取这些参数[^1]。 ```javascript function TargetScreen({ route }) { const { paramKey } = route.params; return ( <View> <Text>Received Param: {paramKey}</Text> </View> ); } ``` #### 屏幕间的上下文共享(类似于继承) 如果多个屏幕需要共享某些状态或数据,则可以考虑使用 React 的 Context API 或 Redux 等全局状态管理工具来实现跨屏的数据共享。这种方式避免了逐层手动传递参数的问题。 ##### 使用 Context API 实现数据共享 定义一个上下文提供者,并将其包裹在整个导航堆栈之外: ```javascript import React, { createContext, useContext, useState } from 'react'; const AppContext = createContext(); export function AppProvider({ children }) { const [sharedData, setSharedData] = useState('Initial Data'); return ( <AppContext.Provider value={{ sharedData, setSharedData }}> {children} </AppContext.Provider> ); } export function useAppContext() { return useContext(AppContext); } ``` 然后,在应用入口处使用该提供者: ```javascript import { NavigationContainer } from '@react-navigation/native'; import { createStackNavigator } from '@react-navigation/stack'; import { AppProvider } from './contexts/AppContext'; const Stack = createStackNavigator(); function App() { return ( <AppProvider> <NavigationContainer> <Stack.Navigator initialRouteName="Home"> {/* 定义您的屏幕 */} </Stack.Navigator> </NavigationContainer> </AppProvider> ); } ``` 最后,在任何组件中都可以访问此上下文中的数据而无需显式传递参数: ```javascript function SomeComponent() { const { sharedData, setSharedData } = useAppContext(); return ( <View> <Text>{sharedData}</Text> <Button title="Update Data" onPress={() => setSharedData('Updated Data')} /> </View> ); } ``` #### 利用默认参数作为“继承” 另一种简单的方法是在导航选项中设置默认参数,这样即使未显式传递某个特定键,也可以为其指定默认值。 ```javascript { params: { someParam: 'defaultValue' } } ``` 随后可以在接收端读取这个默认值。 --- ### 总结 React Native 提供多种机制用于处理不同场景下的数据传递需求。对于简单的单向通信,“props”配合 “navigation” 是最常用的选择;而对于更复杂的状态同步或者多级嵌套情况,则推荐采用 Context API 或专门的状态管理库如 Redux 进行优化设计。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值