目录结构:

app----imgs

--- pages ------ home

------ explore

------ follow

------ profile

------  selected

--- utils

启动流程:

---> index.js  ----> /home/InitApp.js (InitApp )  ------> render()----------->  /home/MainPage  ------>  render()

主要代码摘要:

index.js

AppRegistry.registerComponent('Eyepetizer', ()=>InitApp);

InitApp.js

    render() {

        return (
<Navigator
ref="navigator"
//初始化默认页面,也就是启动app后看到的第一屏
initialRoute={{name: 'MainPage', component: MainPage}} /**
* 配置页面之间跳转的动画,还有其他动画可以使用,所有动画均带手势
* 动画效果有三种:Push,Float,Swipe,支持上下左右四个方向
* 如果使用webstrom的话,可以点进去看下源码,或者看我附上的文章
*/
configureScene={(route)=> {
var config;
//先判断一下传入页面是否自己定义了转场动画
if (route.sceneConfig) {
config = route.sceneConfig;
} else {
config = Navigator.SceneConfigs.HorizontalSwipeJump;
}
//禁用config中的手势返回,否则会导致页面可以左右滑动
config.gestures = null;
return config;
}} //这里需要注意,Navigator一经初始化后,就可以多处使用,整个工程维持一个就好了
renderScene={(route, navigator)=> {
let Component = route.component;
return <Component {...route.params} navigator={navigator}/>
}}
/>
);

MainPage.js

    render() {
return (
<TabNavigator
tabBarStyle={MainPageStyle.tab_container}
tabBarShadowStyle={{height: 0}}>
{this._renderTabItem(SELECTED_TAG, SELECTED_TITLE, SELECTED_NORMAL, SELECTED_FOCUS)}
{this._renderTabItem(EXPLORE_TAG, EXPLORE_TITLE, EXPLORE_NORMAL, EXPLORE_FOCUS)}
{this._renderTabItem(FOLLOW_TAG, FOLLOW_TITLE, FOLLOW_NORMAL, FOLLOW_FOCUS)}
{this._renderTabItem(PROFILE_TAG, PROFILE_TITLE, PROFILE_NORMAL, PROFILE_FOCUS)}
</TabNavigator>
)
} /**
* 渲染tab中的item
* @param tag
* @param title
* @param iconNormal
* @param iconFocus
* @param pageView
* @returns {XML}
* @private
*/
_renderTabItem(tag, title, iconNormal, iconFocus) {
return (
<TabNavigator.Item
selected={this.state.selectedTab === tag}
title={title}
titleStyle={MainPageStyle.tab_title}
selectedTitleStyle={MainPageStyle.tab_title_selected}
renderIcon={() => <Image source={iconNormal} style={MainPageStyle.tab_icon}/>}
renderSelectedIcon={() => <Image source={iconFocus} style={MainPageStyle.tab_icon}/>}
onPress={() => this.setState({selectedTab: tag})}>
{this._createContentPage(tag)}
</TabNavigator.Item>
)
}

  

开源代码分析-react-native-eyepetizer的更多相关文章

  1. Facebook 开源安卓版 React Native,开发者可将相同代码用于网页和 iOS 应用开发

    转自:http://mt.sohu.com/20150915/n421177212.shtml Facebook 创建了React Java 库,这样,Facebook 的工程团队就可以用相同的代码给 ...

  2. 开源代码分析之Android/iOS Hybrid JSBridge框架

    Hybrid开发是现在的主流形式,对于业务快速迭代的公司尤其重要.曾将在鞋厂接触了很多关于Hybrid的理念,在这里分享一些Hybrid框架思想. Hybrid框架包括Native与H5的通信,Web ...

  3. 开源代码分析工具 good

    checkstyle - static code analysis tool for JavaPMD - A source code analyzer

  4. React Native 入门到原理(详解)

    抛砖引玉(帮你更好的去理解怎么产生的 能做什么) 砖一.动态配置 由于 AppStore 审核周期的限制,如何动态的更改 app 成为了永恒的话题.无论采用何种方式,我们的流程总是可以归结为以下三部曲 ...

  5. React Native 从入门到原理

    React Native 是最近非常火的一个话题,介绍如何利用 React Native 进行开发的文章和书籍多如牛毛,但面向入门水平并介绍它工作原理的文章却寥寥无几. 本文分为两个部分:上半部分用通 ...

  6. 使用React Native来撰写跨平台的App

    React Native 是一个 JavaScript 的框架,用来撰写实时的.可原生呈现 iOS 和 Android 的应用.其是基于 React的,而 React 是 Facebook 的用于构建 ...

  7. 关于React Native 火热的话题,从入门到原理

    本文授权转载,作者:bestswifter(简书) React Native 是最近非常火的一个话题,介绍如何利用 React Native 进行开发的文章和书籍多如牛毛,但面向入门水平并介绍它工作原 ...

  8. ReactJs和React Native的那些事

    介绍 1,React Js的目的 是为了使前端的V层更具组件化,能更好的复用,它能够使用简单的html标签创建更多的自定义组件标签,内部绑定事件,同时可以让你从操作dom中解脱出来,只需要操作数据就会 ...

  9. ReactJs和React Native的联系和差异

    1,React Js的目的 是为了使前端的V层更具组件化,能更好的复用,它能够使用简单的html标签创建更多的自定义组件标签,内部绑定事件,同时可以让你从操作dom中解脱出来,只需要操作数据就会改变相 ...

随机推荐

  1. thinkphp一键清除缓存的方法

    后台控制器: <?php namespace Home\Controller; use Think\Controller; class HuancuController extends Cont ...

  2. Pascal 排序算法

    Pascal 排序   排序 排序就是将杂乱无章的数据元素,通过一定的方法按关键字顺序排列的过程.排序问题是一个十分重要的问题,并且排序的方法有很多种: 例子:输入20个数,将它们按照从高到低的次序排 ...

  3. CCPC 2019 网络赛 HDU huntian oy (杜教筛)

    1005 huntian oy (HDU 6706) 题意: 令,有T次询问,求 f(n, a, b). 其中 T = 10^4,1 <= n,a,b <= 1e9,保证每次 a,b互质. ...

  4. vue打包后index.html界面报错

    vue项目完成后,打包放到服务器上,打开index.html页面时发现一片空白并且报错 很明显是js和css引用不到. 解决办法: 修改vue项目config文件夹下面的index.js,将asset ...

  5. css盒模型问题

    css盒模型问题 1.基本概念:标准模型和ie模型 2.标准模型和ie模型的区别 3.css如果设置这两种模型 4.js如何获取盒模型的宽高 5.边距重叠 6.BFC 1.CSS盒模型本质上是一个盒子 ...

  6. 中国剩余定理模数互质的情况模板(poj1006

    http://poj.org/problem?id=1006 #include <iostream> #include <cstdio> #include <queue& ...

  7. eclipse变量名自动补全

    对于编程人员来说,要记住大量的类名或类方法的名字,着实不是一件容易的事情.如果要IDE能够自动补全代码,那将为我们编程人员带来很大帮助. eclipse代码里面的代码提示功能默认是关闭的,只有输入“. ...

  8. vue-cli新手总结

    项目中需要用到vue-cli脚手架来搭建前端框架,对于vue小白,总结一下自己遇到的问题以及解决方案,还要学习的地方有很多. vue-cli安装下载网上有很多教程,但对于新手而言,有些地方需要自己摸索 ...

  9. mysql 主从,双主同步

    1.创建用户并设置远程访问授权 1). A上添加: //ip地址为B的ip地址,用于B访问 ' with grant option; 2). B上添加://ip地址为A的ip地址,用于A访问 ' wi ...

  10. mysql插入数据显示:Incorrect datetime value: '0000-00-00 00:00:00'

    1. 在进行mysql数据插入的时候,由于mysql的版本为5.7.1,部分功能已经升级,导致在datetime数据类型的影响下出现错误:   数据插入: mysql>insert into j ...