默默潜水了两年了,一直都在看大神们写的博客,现在我也分享一下跟RN导航有关的东西。

前两年我主要是做iOS开发的,现在刚找了份工作,应公司要求,现在开始学习reactnative的东西,由于我以前没怎么接触过JavaScript,所以我写的垃圾代码,请大神们不要见笑。

好了,废话不多说,在app里面navigation用的频率肯定不低,所以现在我分享一下这个坑。

首先,RN环境搭建教程太多,我就不说了,如果不会的同学可以直接看这里

然后我们来新建我们的项目

打开终端,进入你想创建项目所在的目录,这里我直接在桌面上创建了

cd desktop

创建项目

react-native init NavDemo

静静的呆一会,咱们的NavDemo就创建好了。

打开文件之后,我们看到的就是这样。

然后进入ios文件夹下,运行NavDemo.xcodeproj ,这样,我们新建的项目就跑起来了。模拟器上显示的就是这个效果

然后,我们打开index.ios.js文件。文件内容我有篇随笔写我们来更改一下Welcome to React Native!的颜色,直接在

welcome: {
fontSize: 20,
textAlign: 'center',
margin: 10,
},

里面加上color:'red',

welcome: {
fontSize: 20,
textAlign: 'center',
margin: 10,

color:'red',
},

看效果

好了,这个先玩到这,我们把为了方便,把index.ios.js文件里render包裹的代码删掉;引入Navigator,为了整洁,我们把Style也删了,然后代码就变成了这样

 import React, { Component } from 'react';
import {
AppRegistry,
Navigator,
Platform
} from 'react-native';
class NavDemo extends Component {
8   render() {
9     return (     );
12   }
}
AppRegistry.registerComponent('NavDemo', () => NavDemo);

现在重点来了,我们在NavDemo文件夹中新建一个app文件夹,在app文件夹中新建一个frist.js文件,文件里的内容如下

import React, { Component } from 'react';
import {
StyleSheet,
Text,
View,
Navgator,
TouchableOpacity
} from 'react-native';
export default class FirstPage extends Component {
render() {
return (
<View style={styles.container}>
<Text style={styles.welcome}>
这是第一页,点击跳到第二页
</Text>
</View>
);
}
} const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#F5FCFF',
},
welcome: {
fontSize: 20,
textAlign: 'center',
margin: 10,
color:'red',
},
});

然后我们在index.ios.js中引入first

import React, { Component } from 'react';
import {
AppRegistry,
Navigator,
Platform,
} from 'react-native'; import FirstPage from './app/first.js'; const defaultRoute = {
component: FirstPage,
}; class NavDemo extends Component {
_renderScene(route, navigator) {
let Component = route.component;
return (
<Component {...route.params} navigator={navigator} />
);
}
render() {
return (
<Navigator
initialRoute={defaultRoute}
renderScene={this._renderScene}
/>
);
}
}
AppRegistry.registerComponent('NavDemo', () => NavDemo);

现在你可以运行一下看一下效果

很显然,first.js才是我们的第一页,index.ios.js只是起到了一个实例化导航的作用。

那么我们在新建第二页second.js

import React, { Component } from 'react';
import {
StyleSheet,
Text,
View,
Navgator,
TouchableOpacity
} from 'react-native'; export default class SecondPage extends Component {
render() {
return (
<View style={styles.container}>
<Text style={styles.welcome}>
这是第二页,点击回到第一页
</Text>
</View>
);
}
} const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#F5FCFF',
},
welcome: {
fontSize: 20,
textAlign: 'center',
margin: 10,
color:'red',
},
});

好了,第二页也建好了,那么我们来实现如何跳到第二页,首先我们在first.js中给text添加点击事件和方法

<TouchableOpacity onPress={this._openPage.bind(this)}>
<Text style={styles.welcome}>
这是第一页,点击跳到第二页
</Text>
</TouchableOpacity>

然后引入第二页,

import SecondPage from './second';

实现点击方法

_openPage() {
this.props.navigator.push({
component: SecondPage,
})
},

试试看能不能跳到第二页。完全可以。

那么如何back呢?

我们在second.js中也要给text添加方法

<TouchableOpacity onPress={this._openPage.bind(this)}>
<Text style={styles.welcome}>
回到第一页
</Text>
</TouchableOpacity>,

实现方法

_openPage() {
this.props.navigator.pop()
}

运行一下看看,OK,简单的导航就这样介绍完毕,完整的代码我贴在下面

first.js

import React, { Component } from 'react';
import {
StyleSheet,
Text,
View,
Navgator,
TouchableOpacity
} from 'react-native'; import SecondPage from './second'; export default class FirstPage extends Component { _openPage() {
this.props.navigator.push({
component: SecondPage,
})
}
render() {
return (
<View style={styles.container}>
<TouchableOpacity onPress={this._openPage.bind(this)}>
<Text style={styles.welcome}>
这是第一页,点击跳到第二页
</Text>
</TouchableOpacity>
</View>
);
}
} const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#F5FCFF',
},
welcome: {
fontSize: 20,
textAlign: 'center',
margin: 10,
color:'red',
},
});

second.js

import React, { Component } from 'react';
import {
StyleSheet,
Text,
View,
Navgator,
TouchableOpacity
} from 'react-native'; export default class SecondPage extends Component { _openPage() {
this.props.navigator.pop()
}
render() {
return (
<View style={styles.container}>
<TouchableOpacity onPress={this._openPage.bind(this)}>
<Text style={styles.welcome}>
回到第一页
</Text>
</TouchableOpacity>
</View>
);
}
} const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#F5FCFF',
},
welcome: {
fontSize: 20,
textAlign: 'center',
margin: 10,
color:'red',
},
});

本文原创,转载前请声明原文地址

 

react-native 简单的导航的更多相关文章

  1. React Native 系列(八) -- 导航

    前言 本系列是基于React Native版本号0.44.3写的.我们都知道,一个App不可能只有一个不变的界面,而是通过多个界面间的跳转来呈现不同的内容.那么这篇文章将介绍RN中的导航. 导航 什么 ...

  2. React Native中自定义导航条

    这是2017年年初开始的公司的项目,对于导航条的要求很高,Android和iOS上必须用一致的UI,按钮位置还有各种颜色都有要求,而且要适应各种奇葩要求. 尝试了一下当时React Native自带的 ...

  3. React Native底|顶部导航使用小技巧

    导航一直是App开发中比较重要的一个组件,ReactNative提供了两种导航组件供我们使用,分别是:NavigatorIOS和Navigator,但是前者只能用于iOS平台,后者在ReactNati ...

  4. React Native顶|底部导航使用小技巧

    导航一直是App开发中比较重要的一个组件,ReactNative提供了两种导航组件供我们使用,分别是:NavigatorIOS和Navigator,但是前者只能用于iOS平台,后者在ReactNati ...

  5. H5、React Native、Native应用对比分析

    每日更新关注:http://weibo.com/hanjunqiang  新浪微博!iOS开发者交流QQ群: 446310206 "存在即合理".凡是存在的,都是合乎规律的.任何新 ...

  6. React Native 在 Airbnb(译文)

    在Android,iOS,Web和跨平台框架的横向对比中,React Native本身是一个相对较新且快速开发移动的平台.两年后,我们可以肯定地说React Native在很多方面都是革命性的.这是移 ...

  7. React Native超简单完整示例-tabs、页面导航、热更新、用户行为分析

    初学React Native,如果没有人指引,会发现好多东西无从下手,但当有人指引后,会发现其实很简单.这也是本人写这篇博客的主要原因,希望能帮到初学者. 本文不会介绍如何搭建开发环境,如果你还没有搭 ...

  8. React Native(四)——顶部以及底部导航栏实现方式

    效果图: 一步一步慢慢来: 其实刚入手做app的时候,就应该做出简单的顶部以及底部导航栏.无奈又在忙其他事情,导致这些现在才整理出来. 1.顶部导航栏:react-native-scrollable- ...

  9. React Native导航器之react-navigation使用

    在上一节Navigation组件,我们使用系统提供的导航组件做了一个跳转的例子,不过其实战能力不强,这里推荐一个超牛逼的第三方库:react-navigation.在讲react-navigation ...

  10. 【React Native开发】React Native控件之DrawerLayoutAndroid抽屉导航切换组件解说(13)

    ),请不要反复加群! 欢迎各位大牛,React Native技术爱好者增加交流!同一时候博客左側欢迎微信扫描关注订阅号,移动技术干货,精彩文章技术推送! 该DrawerLayoutAndroid组件封 ...

随机推荐

  1. angular2系列教程(九)Jsonp、URLSearchParams、中断选择数据流

    大家好,今天我们要讲的是http模块的第二部分,主要学习ng2中Jsonp.URLSearchParams.observable中断选择数据流的用法. 例子

  2. JDBC Tutorials: Commit or Rollback transaction in finally block

    http://skeletoncoder.blogspot.com/2006/10/jdbc-tutorials-commit-or-rollback.html JDBC Tutorials: Com ...

  3. nginx服务器安装及配置文件详解

    nginx在工作中已经有好几个环境在使用了,每次都是重新去网上扒博客,各种编译配置,今天自己也整理一份安装文档和nginx.conf配置选项的说明,留作以后参考.像负载均衡配置(包括健康检查).缓存( ...

  4. Stack Overflow 排错翻译 - Closing AlertDialog.Builder in Android -Android环境中关闭AlertDialog.Builder

    Stack Overflow 排错翻译  - Closing AlertDialog.Builder in Android -Android环境中关闭AlertDialog.Builder 转自:ht ...

  5. Linux基础介绍【第二篇】

    远程连接Linux的原理 SHH远程连接介绍 当前,在几乎所有的互联网企业环境中,最常用的Linux提供远程连接服务的工具就是SSH软件,SSH分为SSH客户端和SSH服务端两部分.其中,SSH服务端 ...

  6. linux系统维护时的一些小技巧,包括系统挂载新磁盘的方法!可收藏!

    这里发布一些平时所用到的小技巧,不多,不过会持续更新.... 1.需要将history创建硬链接ln 全盘需要备份硬链接 ln /etc/xxx /home/xxx 2.root用户不可以远程 /et ...

  7. RTP与RTCP协议介绍(转载)

    RTSP发起/终结流媒体.RTP传输流媒体数据 .RTCP对RTP进行控制,同步.RTP中没有连接的概念,本身并不能为按序传输数据包提供可靠的保证,也不提供流量控制和拥塞控制,这些都由RTCP来负责完 ...

  8. Linux系统中用DNW向ARM开发板下载程序

    在Linux下通过dnw来给开发板发送程序.包括驱动程序代码:secbulk.c,应用程序代码:dnw.c.只能运行在32位系统上,在64位系统上提示错误:DNW download Data size ...

  9. maven常见异常以及解决方法

    本文写的是我在整合ssm框架时遇到的一些问题,我估计很多人也会遇到,所以,这里作为一个总结,希望能够帮助大家解决问题 一,加入shiro组件时抛出的异常 加入步骤(略) 问题 1,保存后,无法导入sh ...

  10. 基于token的多平台身份认证架构设计

    基于token的多平台身份认证架构设计 1   概述 在存在账号体系的信息系统中,对身份的鉴定是非常重要的事情. 随着移动互联网时代到来,客户端的类型越来越多, 逐渐出现了 一个服务器,N个客户端的格 ...