Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >React Native(二):react-navigation

React Native(二):react-navigation

作者头像
Helloted
发布于 2022-06-07 06:00:49
发布于 2022-06-07 06:00:49
2.2K02
代码可运行
举报
文章被收录于专栏:HellotedHelloted
运行总次数:2
代码可运行

四、react-navigation使用

react-navigation是FaceBook推荐使用的一个库,用于导航效果,官方文档

使用之前先在根目录文件内执行命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
yarn add react-navigation

它有三种类型的

  • StackNavigator - 与iOS中的UINavigationController类似,也是采用栈类型,将一个新的页面push进栈中进行展示。
  • TabNavigator - 与UITabbarContrller类似的效果,主要用于一个屏幕内横向切换不同界面
  • DrawerNavigator - 侧滑栏效果

五、StackNavigator的使用

首先,先在根目录下生成一个stack.js的js文件,

在iOS将文件名替换为stack

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"stack" fallbackResource:nil];

照例,先定义好页面

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
AppRegistry.registerComponent('DemoProject', () => RootPage);
export default class RootPage extends React.Component {
  render() {
    return <CustomStack />;
  }
}

其中,CustomStack是我们自定义的导航组件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export const CustomStack = StackNavigator({
  HomePage: {
    screen: HomeVC
  },
  SecondPage: {
    screen: SecondVC
  },
});

由StackNavigator生成导航主键。HomePage和SecondPage是我们的两个页面,页面里带有screen的参数,里面的组件才是定义页面内容的地方。要注意的是,顺序依次是进栈的顺序。

分别定义HomeVC组件和SecondVC组件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class HomeVC extends React.Component {
  static navigationOptions = {
    title: 'HomeVC',
  };
  render() {
    const {
      navigate
    } = this.props.navigation;
    return (
      <View>
        <Text>Hello, This is HomeVC!</Text>
        <Button
          onPress={() => navigate('SecondPage')}
          title="Jump to SecondVC"
        />
      </View>
    );
  }
}


class SecondVC extends React.Component {
  static navigationOptions = {
    title: 'SecondVC',
  };
  render() {
    return (
      <View>
        <Text>Now, you are in SecondVC</Text>
      </View>
    );
  }
}

可以有以下的效果:

全部代码:

stack.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import React from 'react';
import {
  AppRegistry,
  StyleSheet,
  Text,
  View,
  Button
} from 'react-native';
import {
  StackNavigator
} from 'react-navigation';

AppRegistry.registerComponent('DemoProject', () => RootPage);
export default class RootPage extends React.Component {
  render() {
    return <CustomStack />;
  }
}



class HomeVC extends React.Component {
  static navigationOptions = {
    title: 'HomeVC',
  };
  render() {
    const {
      navigate
    } = this.props.navigation;
    return (
      <View>
        <Text>Hello, This is HomeVC!</Text>
        <Button
          onPress={() => navigate('SecondPage')}
          title="Jump to SecondVC"
        />
      </View>
    );
  }
}


class SecondVC extends React.Component {
  static navigationOptions = {
    title: 'SecondVC',
  };
  render() {
    return (
      <View>
        <Text>Now, you are in SecondVC</Text>
      </View>
    );
  }
}

export const CustomStack = StackNavigator({
  HomePage: {
    screen: HomeVC
  },
  SecondPage: {
    screen: SecondVC
  },
});

六、TabNavigator的使用

声明很简单

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const MainTabController = TabNavigator({
  TabItem_1: {
    screen: HomeVc
  },
  TabItem_2: {
    screen: SecondVC
  },
  TabItem_3: {
    screen: ThirdVC
  },
}, {
  tabBarPosition: 'bottom',
  tabBarOptions: {
    activeTintColor: '#e91e63',
  },
});

每个VC都对应一个界面,

tabBarPosition:位置,Tab有顶部top和底部bottom的位置

activeTintColor:是选中时TabItem的颜色

页面代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class HomeVc extends React.Component {
  static navigationOptions = {
    tabBarLabel: 'Home',
    tabBarIcon: ({
      tintColor
    }) => (
      <Image
        source={require('./imgs/01.png')}
        style={[styles.icon, {tintColor: tintColor}]}
      />
    ),
  };
  render() {
    return (
      <View style={styles.homecontainer}>
        <Text>
          This is HomeVC page
        </Text>
      </View>
    );
  }
}

navigationOptions是Tab的一些选项,里面有Tab的名称和图片,依次设置三个页面后可以达到这个效果

将StackNavigator作为一个Page插入TabItem

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const HomeNav = StackNavigator({
  HomePage: {
    screen: HomeVC,
    navigationOptions: {
      title: 'HomePage',
    }
  },
  SecondPage: {
    screen: SecondVC
  },
});

const MainTabController = TabNavigator({
  TabItem_1: {
    screen: HomeNav  //Nav作为一个Page插入来
  },
  TabItem_2: {
    screen: MessageVC
  },
  TabItem_3: {
    screen: SettingVC
  },
}, {
  tabBarPosition: 'bottom',
  tabBarOptions: {
    activeTintColor: '#e91e63',
  },
});

下面就是Tab+Nav的效果

七、DrawerNavigator

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class MyHomeScreen extends React.Component {
  static navigationOptions = {
    drawerLabel: 'Home',
    drawerIcon: ({
      tintColor
    }) => (
      <Image
        source={require('./imgs/01.png')}
        style={[styles.icon, {tintColor: tintColor}]}
      />
    ),
  };

  render() {
    return (
      <View style={styles.container}>
      <Text>This HomePage</Text>
      <Button
        onPress={() => this.props.navigation.navigate('DrawerOpen')}
        title="Show Drawer"
      />
      </View>
    );
  }
}

class MyNotificationsScreen extends React.Component {
  static navigationOptions = {
    drawerLabel: 'Notifications',
    drawerIcon: ({
      tintColor
    }) => (
      <Image
        source={require('./imgs/02.png')}
        style={[styles.icon, {tintColor: tintColor}]}
      />
    ),
  };

  render() {
    return (
      <View style={styles.container}>
      <Text>This MyNotificationsScreen</Text>
      <Button
        onPress={() => this.props.navigation.navigate('DrawerOpen')}
        title="Go back home"
      />
      </View>
    );
  }
}

const styles = StyleSheet.create({
  icon: {
    width: 24,
    height: 24,
  },
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor: '#F5FCFF',
  },
});

const MyApp = DrawerNavigator({
  Home: {
    screen: MyHomeScreen,
  },
  Notifications: {
    screen: MyNotificationsScreen,
  },
});

其中

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
this.props.navigation.navigate('DrawerOpen')

这是打开抽屉

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
this.props.navigation.navigate('DrawerClose')

点击空白或者上面这句代码是关闭抽屉,

navigationOptions里设置的是抽屉的标题或者图片

完整代码Github

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
从0到1打造一款react-native App(二)Navigation+Redux
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/j_bleach/article/details/80714844
j_bleach
2019/07/02
9240
从0到1打造一款react-native App(二)Navigation+Redux
react-navigation的使用
react-navigation分为三个部分 StackNavigator类似顶部导航条,用来跳转页面和传递参数。 TabNavigator 类似底部标签栏,用来区分模块。 DrawerNavigator 抽屉,类似从App左侧滑出一个页面,具体我没有使用过,在这里不做讲解。 TabNavigator的基本用法 const TabNav = TabNavigator( { MainTab: { screen: HomePage, path: '/', navi
czjwarrior
2018/05/28
7040
react-native之navigation
这个文件目录除了src 其他的都是通过react-native init my_app自动生成的。
FinGet
2019/06/28
2.4K0
『React Navigation 3x系列教程』之createStackNavigator开发指南
createStackNavigator 提供APP屏幕之间切换的能力,它是以栈的形式还管理屏幕之间的切换,新切换到的屏幕会放在栈的顶部。
CrazyCodeBoy
2018/12/28
5.2K0
React Native导航器之react-navigation使用
在上一节Navigation组件,我们使用系统提供的导航组件做了一个跳转的例子,不过其实战能力不强,这里推荐一个超牛逼的第三方库:react-navigation。在讲react-navigation之前,我们先看一下常用的导航组件。 导航控件 常见的导航主要分为三种: 1.StackNavigator :类似于普通的Navigator,屏幕上方导航栏 2.TabNavigator:obviously, 相当于iOS里面的TabBarController,屏幕下方标签栏 3.DrawerNavi
xiangzhihong
2018/02/06
12.7K0
React Native导航器之react-navigation使用
Navagation导航
要在 React-Native 中使用导航, 需要提前在项目中引入对应的库, React-Native中现有的几个导航组件: React Navigation 、 NavigatorIOS 、Navigator, 如果你刚开始接触,那么直接选择 React Navigation 就好。如果你只针对 iOS 平台开发,并且想和系统原生外观一致,那么可以选择 NavigatorIOS 。而 Navigator 这个是最早的组件,已经在逐步被 React Navigation 替代,但是它经历了长期的实践,较为稳定。现在用的比较广泛切通用的就是 React Navigation, 本文就详细讲解下这个组件的使用。
conanma
2022/01/08
1.3K0
React Native(四)——顶部以及底部导航栏实现方式
其实刚入手做app的时候,就应该做出简单的顶部以及底部导航栏。无奈又在忙其他事情,导致这些现在才整理出来。
全栈程序员站长
2022/07/20
3.4K0
React Native(四)——顶部以及底部导航栏实现方式
react-navigation,刷新你的导航一、属性介绍二、案例
在2017年1月,新开源的react-navigation库备受瞩目。它有类似于原生版性能的体验效果,可能会成为未来RN导航组件中的主力军。该库包含三类组件: (1)StackNavigator:用
谦谦君子修罗刀
2018/05/02
19.9K0
react-navigation,刷新你的导航一、属性介绍二、案例
React Native开发之react-navigation库详解
众所周知,在多页面应用程序中,页面的跳转是通过路由或导航器来实现的。在0.44版本之前,开发者可以直接使用官方提供的Navigator组件来实现页面的跳转,不过从0.44版本开始,Navigator被官方从react native的核心组件库中剥离出来,放到react-native-deprecated-custom-components的模块中。 如果开发者需要继续使用Navigator,则需要先使用yarn add react-native-deprecated-custom-components命令安装后再使用。不过,官方并不建议开发者这么做,而是建议开发者直接使用导航库react-navigation。react-navigation是React Native社区非常著名的页面导航库,可以用来实现各种页面的跳转操作。 目前,react-navigation支持三种类型的导航器,分别是StackNavigator、TabNavigator和DrawerNavigator。具体区别如下:
xiangzhihong
2020/01/14
6K0
React  Native开发之react-navigation库详解
ReactNative-底部TabBar react-native-tab-navigator
首先需要安装 react-native-tab-navigator npm install react-native-tab-navigator –save 导入组件 import TabNavigator from 'react-native-tab-navigator' 详细代码如下: import React, { Component } from 'react'; import { AppRegistry, ScrollView, StyleSheet, TouchableOpaci
czjwarrior
2018/05/28
8260
React-Navigation Integration with Redux
React-Navigation Integration with Redux Dependencies Main Navigation Components Reducers Example Actions Example Actual Usage in Container Components React-Navigation Integration with Redux Dependencies { "dependencies": { "@expo/samples": "
szhshp
2022/09/21
3030
从navigator到react-navigation进阶教程
随着react-navigation逐渐稳定,Navigator也被光荣的退休了。在React Native生态环境中需要一款可扩展且易于使用的导航组件,Navigator 自然胜任不了,这时React Native社区便孕育出了一个开源导航组件react-navigation。 react-navigation的出现替代了Navigator、 Ex-Navigation等老一代的导航组件,react-navigation可以说是Navigator的加强版,不仅有Navigator的全部功能,另外还支持底部
CrazyCodeBoy
2018/06/07
4K0
React Native之react-native-scrollable-tab-view详解
在React Native开发中,官方为我们提供的Tab控制器有两种:TabBarIOS和ViewPagerAndroid。TabBarIOS,仅适用于IOS平台 ViewPagerAndroid,仅适用于Android平台(严格来讲并不算,因为我们还需要自己实现Tab)。在项目开发中,我们优先选择一些开源兼容性比较好的第三方库,例如,react-navigation,以及本文即将说到的react-native-scrollable-tab-view(官方地址)。react-native-scrolla
xiangzhihong
2018/02/06
6.6K0
React Native之react-native-scrollable-tab-view详解
使用react-native-tab-navigator切换页面
切换页面是app最基本功能。这个功能需要用Navigation组件实现。 RN发展太快了(v49),之前自带的Navigation组件被弃用了,如果只针对ios,还可以用NavigatorIOS 社区中也有几个不错的 https://github.com/react-community/react-navigation https://github.com/wix/react-native-navigation https://github.com/happypancake/react-native-tab-navigator 以react-native-tab-navigator为例,实现下面的tab切换效果很容易:
mafeifan
2018/09/10
2.8K0
使用react-native-tab-navigator切换页面
React Native 实现基于react-native-tab-navigator库Tab切换封装
react-native-tab-navigator是一款Tab切换的库,细心的读者可能注意到了对于TabNavigator.Item选项卡部分,代码功能上基本上是重复的,对此,我们能不能对这种有相同
xiangzhihong
2018/02/06
4.1K0
React Native 实现基于react-native-tab-navigator库Tab切换封装
『React Navigation 3x系列教程』createBottomTabNavigator开发指南
createBottomTabNavigator 相当于iOS里面的TabBarController,屏幕下方的标签栏。如图:
CrazyCodeBoy
2019/01/03
7.3K0
React Native顶|底部导航使用小技巧
导航一直是App开发中比较重要的一个组件,ReactNative提供了两种导航组件供我们使用,分别是:NavigatorIOS和Navigator,但是前者只能用于iOS平台,后者在ReactNative0.44版本以后已经被移除了。 好在有人提供了更好的导航组件,就是我们今天要讲的react-navigation,并且ReactNative官方更推荐我们使用此组件。 本篇文章只讲解基础用法,如果你想了解更多,请戳这里->戳我。  简介 react-navigation主要包括导航,底部tab,顶部tab,
磊哥
2018/05/08
7.9K0
React Native顶|底部导航使用小技巧
React Native 路由使用总结
因长时间习惯使用 Vue 与 React 的 路由,网上查询各种资料,找出类似 Vue/React的路由使用。但是React Native 升级到0.44 之后,运行直接报错,createMemoryHistory('/') 异常, 也许是我的使用不当,或者说是环境原因,期间我也打开node_model研究过一番,也没整明白,总之呢,无法使用。
White feathe
2021/12/08
2.1K0
ReactNative-综合案例(01)
最近几天学了几个ReactNative组件,总觉得单纯的学几个组件进步慢,所以我打算做一些综合性的小案例,练习下实战,我从网上找到一个小案例 ,感觉挺好,也学习了很多,代码内容可能不太一样,主要区别是:我把RN官方不推荐或者已经放弃了的组件进行了替换,如果有需要的可以互相参考下 源代码下载 建完一个工程之后,首先建一个WYMain.js文件,代码如下: 首先安装所需组件: npm install --save react-navigation import React, { Component } f
czjwarrior
2018/05/28
2K0
RN项目第一节
一、项目说明 本项目为模仿美团的项目,采用的是网上提供的API接口。导航采用 公司推荐的react-navigation,滚动条采用第三方组件react-native-scroll-tab-view
谦谦君子修罗刀
2018/05/02
2.8K0
RN项目第一节
相关推荐
从0到1打造一款react-native App(二)Navigation+Redux
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验