目录结构:

app----imgs

--- pages ------ home

------ explore

------ follow

------ profile

------  selected

--- utils

启动流程:

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

主要代码摘要:

index.js

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

InitApp.js

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

MainPage.js

  1. render() {
  2. return (
  3. <TabNavigator
  4. tabBarStyle={MainPageStyle.tab_container}
  5. tabBarShadowStyle={{height: 0}}>
  6. {this._renderTabItem(SELECTED_TAG, SELECTED_TITLE, SELECTED_NORMAL, SELECTED_FOCUS)}
  7. {this._renderTabItem(EXPLORE_TAG, EXPLORE_TITLE, EXPLORE_NORMAL, EXPLORE_FOCUS)}
  8. {this._renderTabItem(FOLLOW_TAG, FOLLOW_TITLE, FOLLOW_NORMAL, FOLLOW_FOCUS)}
  9. {this._renderTabItem(PROFILE_TAG, PROFILE_TITLE, PROFILE_NORMAL, PROFILE_FOCUS)}
  10. </TabNavigator>
  11. )
  12. }
  13.  
  14. /**
  15. * 渲染tab中的item
  16. * @param tag
  17. * @param title
  18. * @param iconNormal
  19. * @param iconFocus
  20. * @param pageView
  21. * @returns {XML}
  22. * @private
  23. */
  24. _renderTabItem(tag, title, iconNormal, iconFocus) {
  25. return (
  26. <TabNavigator.Item
  27. selected={this.state.selectedTab === tag}
  28. title={title}
  29. titleStyle={MainPageStyle.tab_title}
  30. selectedTitleStyle={MainPageStyle.tab_title_selected}
  31. renderIcon={() => <Image source={iconNormal} style={MainPageStyle.tab_icon}/>}
  32. renderSelectedIcon={() => <Image source={iconFocus} style={MainPageStyle.tab_icon}/>}
  33. onPress={() => this.setState({selectedTab: tag})}>
  34. {this._createContentPage(tag)}
  35. </TabNavigator.Item>
  36. )
  37. }

  

开源代码分析-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. 运用shtml类型文件,实现项目页面的分割。

    学过动态网页,如asp.php的人知道如何去引用网站头部.底部文件包含.例如在php中有一个方法:include();这个方法能在当前文档中引入外部文件,从而方便网站的开发和维护,然而html静态文件 ...

  2. C#winfrom listview 设置显示图片

    ListView控件有5种显示图片方式:LargeIcon(大图标),Detail(详细),SmallIcon(小图标),List(列表),Tile,常用前4种.  这里说一下设置方式:LargeIc ...

  3. Eclips安装STS(Spring Tool Suite (STS) for Eclipse)插件

    Spring Tool Suite(sts)就是一个基于Eclipse的开发环境, 用于开发Spring应用程序.它提供了一个现成的使用环境来实现, 调试, 运行, 和部署你的Spring应用程序.包 ...

  4. 5.1_Spring Boot2.x安装Docker

    1.简介 Docker是一个开源的应用容器引擎:是一个轻量级容器技术: Docker 是一个开源的应用容器引擎,基于Go 语言并遵从Apache2.0协议开源.Docker 可以让开发者打包他们的应用 ...

  5. 面试系列12 redis和memcached有什么区别

    (1)redis和memcached有啥区别 这个事儿吧,你可以比较出N多个区别来,但是我还是采取redis作者给出的几个比较吧 1)Redis支持服务器端的数据操作:Redis相比Memcached ...

  6. java_日历类

    calendar是日历类,该类是抽象类不能被实例化 public class CalendarTest { /* 创建对象和方法的使用 */ public static void main(Strin ...

  7. MFC入门--显示静态图片及调用本地软件

    MFC是微软开发的基础类库,主要用来开发图形界面应用程序,在学习中,我们要验证算法好坏,一般需要对结果进行可视化. OpenCV是计算机视觉中的开源算法库,集成了很多先进算法,现在想将MFC与Open ...

  8. JS数组 组团(如何创建数组)var mychar = new Array( )

    组团,并给团取个名(如何创建数组) 使用数组之前首先要创建,而且需要把数组本身赋至一个变量.好比我们出游,要组团,并给团定个名字"云南之旅". 创建数组语法: var myarra ...

  9. Python全栈开发:web框架们

    Python的WEB框架 Bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Python的标准库外,其不依赖任何其他模块. 1 2 3 ...

  10. 在github上怎样克隆vue项目及运行

    长时间不做vue项目,今天看vue项目运行时有些指令忘记了,在这里写下相关指令 .克隆已有项目,一般情况项目中的README.md写的是项目运行步骤,一般项目的运行如下 克隆项目 git clone ...