初始化一个RN项目

react-native init page_framework

page.json

{
"name": "page_framework",
"version": "0.0.1",
"private": true,
"scripts": {
"start": "node node_modules/react-native/local-cli/cli.js start",
"test": "jest"
},
"dependencies": {
"react": "16.0.0-alpha.12",
"react-native": "0.47.1"
},
"devDependencies": {
"babel-jest": "20.0.3",
"babel-preset-react-native": "2.1.0",
"jest": "20.0.4",
"react-test-renderer": "16.0.0-alpha.12"
},
"jest": {
"preset": "react-native"
}
}

引入react-navigation,在项目根目录执行一下命令

yarn add react-navigation

现在的page.json

{
"name": "page_framework",
"version": "0.0.1",
"private": true,
"scripts": {
"start": "node node_modules/react-native/local-cli/cli.js start",
"test": "jest"
},
"dependencies": {
"react": "16.0.0-alpha.12",
"react-native": "0.47.1",
"react-navigation": "^1.0.0-beta.11"
},
"devDependencies": {
"babel-jest": "20.0.3",
"babel-preset-react-native": "2.1.0",
"jest": "20.0.4",
"react-test-renderer": "16.0.0-alpha.12"
},
"jest": {
"preset": "react-native"
}
}

创建项目结构

 在根目录创建src文件夹
在src文件夹下创建root.js
在src文件夹下创建Screens文件夹
在Screens文件夹创建以下文件:home.js/Nearby.js/Message.js/Profile.js/SignIn.js/SignUp.js
在src文件夹下创建styles文件夹
在styles文件夹创建CommonStyles.js文件
在styles文件夹创建index.js文件

修改index.ios.js文件,以component的形式引用Root

import React, { Component } from 'react';
import {
AppRegistry,
} from 'react-native';
import Root from "./src/root" export default class page_framework extends Component {
render() {
return (
<Root />
);
}
} AppRegistry.registerComponent('page_framework', () => page_framework);

修改root.js内容

引用react-navigation库

 import { StackNavigator, TabNavigator } from 'react-navigation';
定义TabNavigator

Tab中定义了4个Tab页,分别是Home, Nearyby, Message, Profile
screen: 后边跟的是component name, navigationOptions是设置tab的参数。
const Tab = TabNavigator(
{
Home:{
screen: Home,
navigationOptions: ({ navigation }) => ({
tabBarLabel: 'Home',
tabBarIcon: ({tintColor}) => (
<Image
source={require("./resource/icons/pfb_tabbar_homepage.png")}
style={[{tintColor: tintColor}, styles.icon]}
/>
),
}),
},
Nearby:{
screen: Nearby,
navigationOptions: ({ navigation }) => ({
tabBarLabel: 'Nearby',
tabBarIcon: ({tintColor}) => (
<Image
source={require("./resource/icons/pfb_tabbar_merchant.png")}
style={[{tintColor: tintColor}, styles.icon]}
/>
),
}),
},
Message:{
screen: Message,
navigationOptions: ({ navigation }) => ({
tabBarLabel: 'Message',
tabBarIcon: ({tintColor}) => (
<Image
source={require("./resource/icons/pfb_tabbar_discover.png")}
style={[{tintColor: tintColor}, styles.icon]}
/>
),
}),
},
Profile:{
screen: Profile,
navigationOptions: ({ navigation }) => ({
tabBarLabel: 'Profile',
tabBarIcon: ({tintColor}) => (
<Image
source={require("./resource/icons/pfb_tabbar_mine.png")}
style={[{tintColor: tintColor}, styles.icon]}
/>
),
}),
},
},
{
tabBarPosition: 'bottom',
swipeEnabled: true,
animationEnabled: true,
lazy: true,
},
);
定义StackNavigator

整个app由3个页面组成:Tab,SignIn,SignUp。
应用默认打开SignIn页面,
以上页面全部注册到StackNavigator中。
const Navigator = StackNavigator(
{
SignIn: { screen: SignIn },
SignUp: { screen: SignUp },
Tab: { screen: Tab },
},
{
navigationOptions: {
headerBackTitle: null,
headerTintColor: '#333333',
},
},
);

在root中使用Navigator

class Root extends Component{

    render(){
return (
<Navigator />
);
}
}
在SignIn页面跳转到主页(Tab页)

在render中拿到navigation上下文,使用this.props.navigation.navigate()方法跳转到相应页面,参数为注册到StackNavigator中的页面,这里使用Tab。
import React, { PureComponent } from 'react';
import {
View,
Text,
Button,
} from 'react-native';
import { CommonStyles } from "../styles/"; class SignIn extends PureComponent{
static navigationOptions = {
header: null,
};
render(){
return(
<View style={CommonStyles.container}>
<Text style={CommonStyles.welcome}>
this is SignIn page!
</Text>
<Text style={CommonStyles.instructions}>
this is SignIn page!
</Text>
<Text style={CommonStyles.instructions}>
this is SignIn page!
</Text>
<Button title="登录" onPress={() =>
this.props.navigation.navigate('Tab')}
/>
<Button title="注册" onPress={() =>
this.props.navigation.navigate('SignUp')}
/>
</View>
);
}
} export default SignIn; 作者:evanywang
链接:https://www.jianshu.com/p/3a4f769261de
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

react-navigation实现页面框架(转载)的更多相关文章

  1. react navigation goBack()返回到任意页面(不集成redux) 一

    方案一: 一.适用场景:在app端开发的时候,相反回到某一个页面的时候保持跳转页面的所有状态不更新,也就是说不触发新的生命周期. 例如:A——>B——>C——>D 要想从D页面直接返 ...

  2. react-native 学习 ----- React Navigation

    很久没有的登陆博客园了,密码都是找回的,从当年的大学生已经正常的走上了程序员的道路,看到之前发的博客还是写的android,现在自己已经在使用了react-native了. 大学毕业了,做了java后 ...

  3. 一次掌握 React 与 React Native 两个框架

    此系列文章将整合我的 React 视频教程与 React Native 书籍中的精华部分,给大家介绍 React 与 React Native 结合学习的方法. 1. 软件开发语言与框架的学习本质 我 ...

  4. [RN] 04 - React Navigation

    react-navigation和react-router的对比: 支持的平台: react-navigation: react-native react-router: react-native.r ...

  5. react部署之页面空白

    react部署之页面空白 问题:create-react-app build打包后,页面出现空白. 可能一: 控制台报错,js等文件找不到(404) 文件路径问题,只需修改package.json文件 ...

  6. React Native常用组件之TabBarIOS、TabBarIOS.Item组件、Navigator组件、NavigatorIOS组件、React Navigation第三方

    以下内容为老版本React Native,faceBook已经有了新的导航组件,请移步其他博客参考>>[我是传送门] 参考资料:React Navigation  react-native ...

  7. React-native 导航插件React Navigation 4.x的使用

    React-native 导航插件React Navigation 4.x的使用 文档 英文水平可以的话,建议直接阅读英文文档 简单使用介绍 安装插件 yarn add react-navigatio ...

  8. react基础学习和react服务端渲染框架next.js踩坑

    说明 React作为Facebook 内部开发 Instagram 的项目中,是一个用来构建用户界面的优秀 JS 库,于 2013 年 5 月开源.作为前端的三大框架之一,React的应用可以说是非常 ...

  9. React Navigation / React Native Navigation 多种类型的导航结合使用,构造合理回退栈

    React Navigation 更新到版本5已经是非常完善的一套导航管理组件, 提供了Stack , Tab , Drawer 导航方式 , 那么我们应该怎样设计和组合应用他们来构建一个完美的回退栈 ...

随机推荐

  1. java 类变量初始化顺序

    假定有一个类定义如下: package com.zhang; public final class Girl { // static代码块1 private static String sex = & ...

  2. Utf-8+Bom编码导致的读取数据部分异常问题

    项目中经常会有这种场景,在配置文件中配置对应关系,项目启动的时候从中读取数据存入map缓存起来,这样使用的时候就可以直接从map找到对应的映射关系. 然后遇到了这么一个诡异的问题,一个简单的映射关系如 ...

  3. TCP/IP报文 三次握手 四次挥手

    1.TCP报文格式  TCP/IP协议的详细信息参看<TCP/IP协议详解>三卷本.下面是TCP报文格式图:图1 TCP报文格式  上图中有几个字段需要重点介绍下:  (1)序号:Seq序 ...

  4. Oracle.练习题

    2018-07-31 ---练习3 ---创建sporter表 create table sporter( sporterid ) constraint sport_id primary key, s ...

  5. MyEclipse常用设置和快捷键

    Java快捷键 1.注释快捷键 先敲/  再敲两个**     Enter 回车 2.system.out.println(); 常用设置 [子类继承父类] [编码字体设置] 删除当前行:ctrl+d ...

  6. docker图形化管理工具portainer

    本章主要介绍docker的web图形化管理工具.这里使用 portainer(类似与dockui不过dockerui只支持单节点) 镜像名称 portainer/portainer 一.启动porta ...

  7. U帮忙U盘启动盘制作

    第一步:制作U盘启动盘前的软.硬件准备 1.准备一个U盘或内存卡(尽量使用2G以上的) 2.进入 U帮忙官网 下载最新版U盘启动盘制作工具! 3.搜索并下载ghost版系统文件存放到电脑中. 第二步: ...

  8. flask 开启多线程

    app.run(debug=True, threaded=True)

  9. Bootstrap--思维导图

    Bootstrap--思维导图

  10. Cracking The Coding Interview 4.6

    //原文: // // Design an algorithm and write code to find the first common ancestor of two nodes in a b ...