react-navigation的使用

本文详细介绍了 React Navigation 中 StackNavigator、TabNavigator 和 DrawerNavigator 的基本用法及界面间跳转和参数传递的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

欢迎访问我的个人博客

react-navigation分为三个部分

  • StackNavigator类似顶部导航条,用来跳转页面和传递参数。
  • TabNavigator 类似底部标签栏,用来区分模块。
  • DrawerNavigator 抽屉,类似从App左侧滑出一个页面,具体我没有使用过,在这里不做讲解。

TabNavigator的基本用法

const TabNav = TabNavigator(
  {
    MainTab: {
      screen: HomePage,
      path: '/',
      navigationOptions: {
        title: '首页',
        // tabBarLabel: '首页',
        tabBarIcon: ({ tintColor, focused }) => (
          focused
                    ?
                    <Image
                        source={require('../images/tab_icon_homes@2x.png')}
                    />
                    :
                    <Image
                        source={require('../images/tab_icon_home@2x.png')}
                    />
        ),
      },
    },
    MinePage: {
      screen: MinePage,
      path: '/settings',
      navigationOptions: {
        title: '我的',
        tabBarIcon: ({ tintColor, focused }) => (
        focused
                    ?
                    <Image
                        source={require('../images/tab_icon_usercenters@2x.png')}
                    />
                    :
                    <Image
                        source={require('../images/tab_icon_usercenter@2x.png')}
                    />
        ),
      },
    },
  },
  {
    tabBarPosition: 'bottom',
    animationEnabled: false,
    swipeEnabled: false,
    tabBarOptions:{
        activeTintColor: '#5c6de5', // 改变tabBar选中字体颜色
        // inactiveTintColor: '#CC9999', // 文字和图片默认颜色
        // showIcon: true, // android 默认不显示 icon, 需要设置为 true 才会显示
        // indicatorStyle: {
        //     height: 0
        // }, // android 中TabBar下面会显示一条线,高度设为 0 后就不显示线了, 不知道还有没有其它方法隐藏???
        // style: {
        //     backgroundColor: '#FFFF99', // TabBar 背景色
        // },
        // labelStyle: {
        //     fontSize: 12, // 文字大小
        // },
    }
  }
);

StackNavigator的基本用法

const StacksOverTabs = StackNavigator({
  Root: {
    screen: TabNav,
  },
  TwoPage: {
    screen: TwoPage,
    navigationOptions: {
      title: '二级页面',
    },
  },
  Profile: {
    screen: FirstPage,
    path: '/people/:name',
    navigationOptions: ({ navigation }) => {
      title: `${navigation.state.params.name}'s Profile!`;
    },
  },
});

export default StacksOverTabs;

界面之间跳转

const MyNavScreen = ({ navigation, banner }) => (
  <ScrollView>
    <SampleText>{banner}</SampleText>
    <Button
    // 界面之间传值
      onPress={() => navigation.navigate('Profile', { name: 'Jordan' })}
      title="去第一个页面"
    />
    <Button
      onPress={() => navigation.navigate('TwoPage')}
      title="去二级页面"
    />
    <Button
      onPress={() => navigation.navigate('MinePage')}
      title="去我的页面"
    />
    <Button onPress={() => navigation.goBack(null)} title="返回" />
  </ScrollView>
);

const HomePage = ({ navigation }) => (
  <MyNavScreen banner="我是首页" navigation={navigation} />
);

const FirstPage = ({ navigation }) => (
  <MyNavScreen
    banner={`${navigation.state.params.name}s Profile`}
    navigation={navigation}
  />
);

const TwoPage = ({ navigation }) => (
  <MyNavScreen banner="我是二级页面" navigation={navigation} />
);

const MinePage = ({ navigation }) => (
  <MyNavScreen banner="我是我的页面" navigation={navigation} />
);

效果图:

这里写图片描述

### React Navigation 使用指南 React Navigation 是一个用于 React Native 应用程序的强大的导航解决方案。它允许开发者创建复杂的导航结构,如堆栈导航、抽屉导航和标签导航等。以下是关于如何使用 React Navigation 进行导航的详细说明。 #### 安装依赖 在开始之前,需要安装必要的依赖项。以下是基本的安装命令[^5]: ```bash npm install @react-navigation/native ``` 此外,还需要安装与平台相关的依赖项,例如 `react-native-screens` 和 `react-native-safe-area-context`,以确保更好的性能和兼容性。 ```bash npm install react-native-screens react-native-safe-area-context ``` #### 配置导航容器 为了使导航功能正常工作,必须将整个应用程序封装在 `<NavigationContainer>` 中。通常,这会在入口文件(如 `App.js`)中完成[^1]: ```javascript import * as React from 'react'; import { NavigationContainer } from '@react-navigation/native'; export default function App() { return ( <NavigationContainer> {/* Rest of your app code */} </NavigationContainer> ); } ``` #### 创建堆栈导航 React Navigation 提供了多种导航类型,其中堆栈导航是最常用的一种。以下是如何设置堆栈导航的示例代码[^4]: ```javascript import * as React from 'react'; import { createNativeStackNavigator } from '@react-navigation/native-stack'; const Stack = createNativeStackNavigator(); function HomeScreen() { return ( <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}> <Text>Home Screen</Text> </View> ); } export default function App() { return ( <NavigationContainer> <Stack.Navigator> <Stack.Screen name="Home" component={HomeScreen} /> </Stack.Navigator> </NavigationContainer> ); } ``` #### 添加更多屏幕 可以继续添加更多的屏幕到堆栈导航中。每个屏幕通过 `Stack.Screen` 组件定义,并指定其名称和对应的组件[^2]: ```javascript function DetailsScreen() { return ( <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}> <Text>Details Screen</Text> </View> ); } <Stack.Navigator> <Stack.Screen name="Home" component={HomeScreen} /> <Stack.Screen name="Details" component={DetailsScreen} /> </Stack.Navigator> ``` #### 导航参数 可以通过传递参数在不同屏幕之间共享数据。例如,在从 `HomeScreen` 跳转到 `DetailsScreen` 时,可以传递一些参数[^2]: ```javascript navigation.navigate('Details', { itemId: 86 }); ``` 在目标屏幕上,可以通过 `route.params` 获取这些参数: ```javascript function DetailsScreen({ route }) { return ( <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}> <Text>Item ID: {route.params.itemId}</Text> </View> ); } ``` #### 其他导航类型 除了堆栈导航,React Navigation 还支持其他类型的导航,例如底部标签导航和抽屉导航[^4]。例如,创建一个底部标签导航: ```javascript import { createBottomTabNavigator } from '@react-navigation/bottom-tabs'; const Tab = createBottomTabNavigator(); export default function App() { return ( <NavigationContainer> <Tab.Navigator> <Tab.Screen name="Home" component={HomeScreen} /> <Tab.Screen name="Settings" component={SettingsScreen} /> </Tab.Navigator> </NavigationContainer> ); } ``` #### 流体过渡效果 如果需要更平滑的过渡效果,可以参考 Fluid Transitions for React Navigation 项目[^3]。该项目提供了丰富的动画选项,适用于对用户体验有更高要求的应用场景。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值