本文基于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. 项目实战12.2—企业级监控工具应用实战-zabbix操作进阶

    无监控,不运维.好了,废话不多说,下面都是干货. 流量党勿入,图片太多!!! 项目实战系列,总架构图 http://www.cnblogs.com/along21/p/8000812.html 一.U ...

  2. Linux下查看Go语言软件运行情况

    在Linux下,使用"jps"可以查看用Java语言写的软件的运行情况,如果要查看GO语言写的软件的运行情况,可以使用"gops",但这不是系统自带的,需要进行 ...

  3. WebAPI返回JSON

    web api写api接口时默认返回的是把你的对象序列化后以XML形式返回,那么怎样才能让其返回为json呢,下面就介绍两种方法: 方法一:(改配置法) 找到Global.asax文件,在Applic ...

  4. 【JS】第一个js示例

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  5. OC学习10——内存管理

    1.对于面向对象的语言,程序需要不断地创建对象.这些对象都是保存在堆内存中,而我们的指针变量中保存的是这些对象在堆内存中的地址,当该对象使用结束之后,指针变量指向其他对象或者指向nil时,这个对象将称 ...

  6. 查找 GPU 计算能力

    你能在这里找到你的 GPU 的计算能力: https://en.wikipedia.org/wiki/CUDA#Supported_GPUs

  7. css弹性盒子新旧兼容

    前言:本篇随笔是对弹性盒子有了解的人来写的这篇文章,具体属性产生的效果这里不做说明,基础的东西去查文档.这里只是总结. 时至今日,css3的flex弹性盒子在移动端基本上都是支持的,但不排除有些些低版 ...

  8. Linux第九讲随笔 -进程管理 、ps aux 、

    Linux第九讲1,进程管理 Linux在执行每一个程序时,就会在内存中为这个程序建立一个进程,以便让内核可以管理这个运行中的进程,进程是系统分配各种资源,进程调度的基本单位. 怎么查看进程 一.ps ...

  9. java.util.HashSet

    Operations Time Complexity Notes add, remove, contains, size O(1) assuming the hash functions has di ...

  10. Regular expressions in lexing and parsing(翻译)

    词法分析和语法分析中的正则表达式 (英文原文来自rob pike 的博客 https://commandcenter.blogspot.jp/2011/08/regular-expressions-i ...