目录结构:

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. .net core, docker 在vs2019开发过程中的问题以及解决办法

    .net core, docker 在vs2019开发过程中的问题以及解决办法 记录下来,帮助Ta人~ 1.vs调试,快Build完后提示Docker 端口:xxxx,xxxx,xxxx占用 解决办法 ...

  2. VS2010-MFC(菜单:菜单及CMenu类的使用)

    转自:http://www.jizhuomi.com/software/212.html 上一节讲的是VS2010的菜单资源,本节主要讲菜单及CMenu类的使用. CMenu类的主要成员函数 MFC为 ...

  3. VS2010-MFC(常用控件:标签控件Tab Control 上)

    转自:http://www.jizhuomi.com/software/205.html 前面两节讲了树形控件Tree Control,本节开始讲解标签控件Tab Control,也可以称为选项卡控件 ...

  4. redis服务后台运行

    文章目录 进入redis的安装目录 查看目录结构 进入src目录,普通启动效果 编辑redis服务目录下的redis.conf 进入src目录,执行后台运行的命令 检查服务是否开启 进入redis的安 ...

  5. Vue项目组织规范

    目录 一.项目结构的核心思想 二.项目目录结构 三.资源路径编译规则 四.index.html 五.build目录 和 config目录 六.public目录 七.static 目录 八.src目录结 ...

  6. Laravel5.4中自定义404等错误页面

    1.在resources/views/下简历文件夹error,在error文件中建立"404.blade.php文件". <!DOCTYPE html PUBLIC &quo ...

  7. Java中方法的定义与使用,以及对数组的初步了解。

    方法 方法的含义 定义: 方法就是用来完成解决某件事情或实现某个功能的办法. 方法实现的过程中,会包含很多条语句用于完成某些有意义的功能——通常是处理文本,控制输入或计算数值. 我们可以通过在程序代码 ...

  8. MVC中利用ViewBag传递Json数据时的前端处理方法

    用viewBag传递Json字符串到前端时,json字符串中的“会被转义为& quot,前端处理方法为@Html.Raw(Json.Encode(ViewBag.Data)),再用eval() ...

  9. No converter found for return value of type: class com.alibaba.fastjson.JSON解决办法

    默认情况下,springMVC的@ResponseBody返回的是String类型,如果返回其他类型则会报错.使用fastjson的情况下,在springmvc.xml配置里加入: <mvc:a ...

  10. Android开发 EditText按回车按键后出现 focus search returned a view that wasn't able to take focus! 错误

    问题描述 将EditText这个View成为了ListView或者RecyclerView的item时,在按输入法的回车/下一步/next时会出现的 focus search returned a v ...