本文基于React Native 0.52

Demo上传到Git了,有需要可以看看,写了新内容会上传的。Git地址 https://github.com/gingerJY/React-Native-Demo

一、基础

1、三种类型

    • TabNavigator —— 用于设置多个选项卡的页面
    • StackNavigator —— 用于页面之间的跳转
    • DrawerNavigator —— 用于侧面滑出的抽屉效果

  2、属性配置

    • navigate(routeName, params, action) —— 跳转页面

      • routeName:目标路由名称
      • params:传递参数(目标页面用this.props.navigation.state.params可以取出参数)
      • action:在子页面运行的操作(没用过,有需要可以参看官方文档)
    • state —— 当前页面的状态
      • 例如,传递的params就存在state中
    • setParams —— 设置路由参数
    • goBack —— 关闭当前页面,返回上一页
      • 也可以设置返回到指定页(如:a-->b-->c-->d,如果goBack(),则d返回到c;如果goBack(b),则d返回到a)
    • dispatch —— 发送一个动作到路由(没用过,有需要可以参看官方文档)

二、实例(完整代码在4)

安装react-navigation

npm install react-navigation --save

  1、TabNavigator

  ① 添加几个简单的页面(如下图中的home、user、category,都是一样的,就改下名字)  

import React, { Component } from 'react';
import {
StyleSheet,
View,
Text,
} from 'react-native'; export default class home extends Component { render() {
return (
<View style={styles.container}>
<Text>home</Text>
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex: ,
alignItems: 'center',
backgroundColor: '#ff9999',
},
});

②App.js

    • 引入需要跳转的页面;根据需要引入三种导航

      import {DrawerNavigator,StackNavigator, TabNavigator, TabBarBottom } from 'react-navigation';
      import Home from './app/page/home/home';
      ……………………省略
    • 设置切换的页面及其label、icon;设置tabBar位置、动画,状态样式等
      const Tab = TabNavigator(
      {
      Home: {
      screen: Home,
      navigationOptions: ({ navigation }) => ({
      tabBarLabel: '首页',
      tabBarIcon: ({ tintColor }) => (
      <Image source={require('./app/img/home.png')} style={[{ tintColor: tintColor, width: , height: }]} />
      ),
      })
      },
      ………………省略
      },
      {
      tabBarComponent: TabBarBottom,
      tabBarPosition: 'bottom',//tabBar位置
      // swipeEnabled: false,//是否滑动切换,默认true
      animationEnabled: true,
      lazy: true,
      tabBarOptions: {
      activeTintColor: '#ff4f39',
      inactiveTintColor: '#979797',
      style: { backgroundColor: '#ffffff' },
      },
      }
      );

2、StackNavigator

①在App.js中加入如下代码。把tab包含到这里面,search就是需要跳转的页面。

const Stack = StackNavigator(
{
Tab: { screen: Tab },
Search: { screen: Search },
}, {
navigationOptions: {
headerBackTitle: null,
headerTintColor: '#333333',
showIcon: true,
gesturesEnabled: true,
header: null,
},
mode: 'card',
headerMode: 'screen',
}
);

    ②在home.js添加一个按钮,点击跳转Search页面

<Button
onPress={() => {this.props.navigation.navigate('Search')}}
title="go to Search"
/>

3、DrawerNavigator

    ① 在App.js加入DrawerNavigator ,把StackNavigator包在里面(现在从外到里的顺序是DrawerNavigator,StackNavigator, TabNavigator)

const Drawer = DrawerNavigator(
{
Stack: { screen: Stack },
Search: { screen: Search },
},
);

    ②在home.js添加一个按钮,点击打开侧边栏

<Button
onPress={() => {this.props.navigation.navigate('DrawerToggle')}}
title="Drawer"
/>

  4、完整代码

    App.js完整代码https://github.com/gingerJY/example/blob/master/RN_navigation/App.js

    home.js完整代码 https://github.com/gingerJY/example/blob/master/RN_navigation/home.js

三、效果图

  图一是TabNavigator 实现的底部导航

  图二是StackNavigator 实现跳转search页面

  图三是DrawerNavigator 实现抽屉导航

         

参考文档https://reactnavigation.org/docs/navigators/navigation-prop

END----------------------------------------------------------------------------------------

React Native学习(三)—— 使用导航器Navigation跳转页面的更多相关文章

  1. React Native 学习(三)之 FlexBox 布局

    React Native 学习(三)之 FlexBox 布局

  2. React Native学习(二)—— 开始一个项目

    本文基于React Native 0.52 一.创建一个项目 1.初始化一个RN项目 react-native init RNDemo 2.连接一个设备或是打开模拟器 可以通过 adb devices ...

  3. React Native 学习笔记--进阶(二)--动画

    React Native 进阶(二)–动画 动画 流畅.有意义的动画对于移动应用用户体验来说是非常必要的.我们可以联合使用两个互补的系统:用于全局的布局动画LayoutAnimation,和用于创建更 ...

  4. iOS 写给iOS开发者的React Native学习路线(转)

    我是一名iOS开发者,断断续续一年前开始接触React Native,最近由于工作需要,专职学习React Native也有一个多月了.网络上知识资源非常的多,但能让人豁然开朗.迅速学习的还是少数,我 ...

  5. 写给iOS开发者的React Native学习路线(转)

    我是一名iOS开发者,断断续续一年前开始接触React Native,最近由于工作需要,专职学习React Native也有一个多月了.网络上知识资源非常的多,但能让人豁然开朗.迅速学习的还是少数,我 ...

  6. React Native 学习-01

    React Native 学习 (学习版本 0.39) 一.环境配置 二.IDE选择 webstorm 1.webstorm配置 ①.首先是可以选择使用汉化包汉化.eu68 ②.安装插件和外部库. 由 ...

  7. react native 学习一(环境搭配和常见错误的解决)

    react native 学习一(环境搭配) 首页,按照http://reactnative.cn/docs/0.30/getting-started.html#content上的介绍,下载安装pyt ...

  8. React Native 学习资料

    React Native 学习资料 学习资料 网址 React Native中文网 https://reactnative.cn/

  9. ios学习-delegate、传值、跳转页面

    ios学习-delegate.传值.跳转页面     1.打开xcode,然后选择ios--Application--Empty Application一个空项目. 项目目录: 2.输入项目名称以及选 ...

随机推荐

  1. Tencent社会招聘scrapy爬虫 --- 已经解决

    1.用 scrapy 新建一个 tencent 项目 2.在 items.py 中确定要爬去的内容 # -*- coding: utf- -*- # Define here the models fo ...

  2. java 网络编程学习笔记

    1.IP地址 IP地址组成:网络号段+主机号段 IP地址分类: A类:第一号段为网络号段+后三段的主机号段 1.0.0.1---127.255.255.254(10.x.x.x是私有地址) 一个网络号 ...

  3. centos6.5安装git

    1.git源码地址:http://codemonkey.org.uk/projects/git-snapshots/git/

  4. dubbo,eclipse,服务报错

    运行e3-manager报错找不到类,更新了子模块,但e3-manager下没有更新:

  5. 小白的Python之路 day2 字符编码和转码

    字符编码和转码 详细文章: http://www.cnblogs.com/yuanchenqi/articles/5956943.html http://www.diveintopython3.net ...

  6. [置顶] xamarin android 布局尺寸了解

    为了使UI界面在不同大小的移动端显示器上能够正常显示,大家可能都知道使用sp作为字体大小的单位,dp作为其他元素长度的单位. 前几天看了一篇文章关于 App设计规范的,文章用心写的非常好,这里是链接  ...

  7. bzoj 1758: [Wc2010]重建计划

    Description Input 第 一行包含一个正整数N,表示X国的城市个数. 第二行包含两个正整数L和U,表示政策要求的第一期重建方案中修建道路数的上下限 接下来的N-1行描述重建小组的原有方案 ...

  8. vi 和vim 的区别

    它们都是多模式编辑器,不同的是vim 是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面.vim的这些优势主要体现在以下几个方面:1.多级撤消我们知道在vi里,按 u只能撤消上次命 ...

  9. 解决mysql漏洞 Oracle MySQL Server远程安全漏洞(CVE-2015-0411)

    有时候会检测到服务器有很多漏洞,而大部分漏洞都是由于服务的版本过低的原因,因为官网出现漏洞就会发布新版本来修复这个漏洞,所以一般情况下,我们只需要对相应的软件包进行升级到安全版本即可. 通过查阅官网信 ...

  10. Java后端程序员都做些什么?

    这个问题来自于QQ网友,一句两句说不清楚,索性写个文章. 我刚开始做Web开发的时候,根本没有前端,后端之说. 原因很简单,那个时候服务器端的代码就是一切:接受浏览器的请求,实现业务逻辑,访问数据库, ...