React Native 学习总结。

一、React Native简介

      React Native是由facebook开发的一套框架,可以通过它使用类似前端开发的方式来开发原生的IOS/android应用。其与用html5构建的界面的最大区别在于react native所构建的界面实质上是使用的平台本身原生的native控件,所以它会比html5界面的操作体验会好很多。理解上可以把React native当成一个转换桥,他会将用JavaScript等前端代码编写的界面转换成各平台原生的界面。

      跨平台吗?那只要开发一套代码就可以搞定IOS/Android两个平台了。其实不然,React Native并不能完全做到类似java那样的“一次开发,到处运行”的跨平台体验。它宣称的是“一次学习,到处编写”,也就是说,如果你想开发一个应用,Android和IOS平台都要支持,那么你可以使用React Native技术分别为IOS和Android各开发一套。也就是两套代码一套技术。因为现在的React Native库中除了一些抽象极强的通用组件外剩下的有将近%50的组件是平台相关的,不同的平台使用不同的组件,所以你没法做到完全的跨平台。当然只是部分跨平台式的代码复用是可以的,只要程序结构设计合理将model层进行剥离复用当然没有问题。


二、React Native使用场景分析

      1、整个项目全部采用React Native,这种方式现在好像也就作为创始人的facebook在这么玩。虽说版本更新到现在整个框架越来越趋于成熟稳定,但是如果作为一名原生的native开发者来说,初次接触并不会有太大的把握去熟练的运用它。特别是如果有需求涉及到一些复杂的界面交互显示的话那现在版本的React Native还真不一定能实现。因为其依赖于原生控件的接口暴露,有些控件的接口现在版本的React Native还没有实现出来,更别说一些平台语言特性的东西,比如IOS里面的使用KVO的形式监听某个控件属性的变化来实现各种联动动画效果。不谈动画如果只是用其来实现一些复杂的动态布局,那仅仅dom操作这一项估计就够开发人员头疼的了。而原生的开发方式在这一块的优势还是很明显了,不止有大量成熟的第三方UI框架可以使用,而且不必被react native没能暴露出的原生控件接口所限制。所以就现阶段来说如果你只是需要开发一个比较简单的应用,里面不会有复杂的界面布局或交互那么你才可以选择全部用React native来开发你的app, 否则并不介意你这么做。

       2、部分使用React Native, 这种方式在现阶段应该是使用的最为广泛的方式,个人觉得也是最科学的方式。 如果界面和交互方式比较简单,同时需要保持较高频率的更新,或者是作为一个试水功能看看用户反应,不需要做很复杂的功能界面,那么使用React Native是非常合适的。与原生开发相同的用户交互体验,同时使用的是类似前端的开发方式可以一定程度上提高开发效率,还能保持热更新,一举三得值得拥有。现在淘宝、携程、QQ空间客户端也都在部分功能上使用了React Native。


三、React Native的两种实施机制

      1、使用node js服务端来提供界面加载服务与客户端关联,因为我们的界面构建原始代码是放在服务端的,客户端在加载React native界面时会访问服务端获取“编译”后的代码,但是这种方式有个前提便是客户端必须要有网络支持,如果用户处于无网状态下就只能显示空白界面了。当然大部分情形并没有什么不妥,如果我们的app在业务上本来就是依赖于网络去服务端获取数据,无网情况下无法发送网络请求获取数据时当然只能显示空白界面。但是还有一些情况是另外,比如用户现在打开的是不需要网络去请求数据的界面呢,比如设置界面或者是本地缓存的数据展示界面等。这时候因为界面构建代码是放在网络服务端的,所以就算业务上不需要网络数据,但是界面却依赖于网络。当然这种方式的好处就是更新方便,安装包相对较小。IOS代码如下:

NSURL *jsCodeLocation = [NSURL URLWithString:@"http://127.0.0.1:8081/index.ios.bundle?platform=ios&dev=true"];

RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation

moduleName:@"Test"

initialProperties:nil

launchOptions:launchOptions];

       2、第二种方式就是将服务端“编译”好了的中间代码直接放在客户端来实现本地加载,这样就可以不依赖于网络去加载界面了。缺点是版本的更新就需要升级客户端来完成。(理论上可以尝试在服务端提供一个文件传输接口,每次有更新则请求最新“编译”好的文件替换进原有的文件中来实现热更新,但是这种方式官方文档里找不到,所以需要自己去尝试,后期试验后再补充这块的内容)。IOS代码如下:

NSURL *jsCodeLocation = [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];

RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation

moduleName:@"Test"

initialProperties:nil

launchOptions:launchOptions];

可以看到两种方式的差别就是加载地址一个是网络地址,一个是本地文件地址而已。最后顺便提一下,如果IOS端在React Native代码中使用require('image!image_name')加载本地资源图片时务必要保证xcassets集中的每个image set的名称和图片的名称一致,否则将读取不到图片。

以上就是最近学习React Native的一些个人总结,如有错误之处还请多多指正,后期我还会更新一下在实际项目中使用React Native的经验,希望能与大家多多交流。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,980评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,422评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,130评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,553评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,408评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,326评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,720评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,373评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,678评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,722评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,486评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,335评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,738评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,283评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,692评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,893评论 2 335

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,132评论 25 707
  • React Native 什么是React Native,它能做什么使用React Native开发跟我们原生应用...
    aSnail阅读 482评论 0 1
  • A matrix is "Toepliz" if each descending diagonal from le...
    akak18183阅读 195评论 0 0
  • 记录情绪。昨晚简单的打声儿招呼,你好。陈主任你好。我都不敢看他。心里还难过了。我一直在刨根问底,自己在难过什么?难...
    生活中的夹心巧克力阅读 141评论 0 0