reactnative在app开发中的应用研究
2017-09-08焦锋
焦锋
摘要:React Native是2015年FaceBook研究的一种新的开发APP的技术,通过JavaScript语言来开发APP,且有一次开发随处使用的理念。因此,也是目前最火的APP前言技术之一。本文主要对该技术在APP开发中的应用进行研究,主要从开发方式、热更新特点和方法等多个方面进行研究。
关键词:React Native;app;热更新;JavaScript
中图分类号:TN929.53 文献标识码:A 文章编号:1007-9416(2017)06-0109-01
1 单纯的React Native APP应用
单纯的React Native应用,实际上就可以理解成是原生应用的一个Activity,通过启动着一个Activity之后,就通过JS中的各个state状态,来刷新各个View界面,然后一个APP应用就诞生了。在这种APP应用中,主要是由组件组成中,各个组件组装成一个大的View。而View 主要是通过state和props来获取所有的数据以及数据改变时更新View界面。在这种应用中,采用的是盒子布局方式,这种布局方式与原生不同,具有很大的灵活性,分主轴和次轴。然后分别可以设置其样式。
2 原生APP与React Native APP混合开发的应用
2.1 React Native Activity的自定义
如果进行一个RN项目开发,初始化项目之后,就会有一个Activity是继承RnActivity的。如果进行混合开发时,由于我们的Activity可能要做很多工作,还想继承我们原生的Activity。因此,就可以自定义一个RN的Activity,无须继承官网的Activity。假如,我们已经有了一个BaseActivity。内部可以使用路由进行跳转。但是混合开发明显不行,否则将无法正常的在RN和原生界面之间进行来回跳转。即便可以,复杂度也会大大增加。经过尝试,在一个混合项目中,可以有若干个RN的Activity,每一个Activity可以开发一个功能。只需要修改上文中的index.android。只要把入口修改了,它就会从不同的入口去找,同时在js入口文件中,要进行注册。
2.2 原生与JS之间的相互调用
对于JS方法来说,是离不开原生应用的,React Native开发的实质还是进行的原生开发。而且有很多东西,比如硬件的mac、域名获取或者其他只有原生方法能够实现的功能,就必须通过原生方法来实现,然后由JS端进行调用。JS调用原生的方法相对来说比较简单,只需要在原生中注册Module,然后在方法名之前写上标识@react method 即可。在JS端通过NativeModules 这个API就可以进行调用。如果想要进行Activity之间的相互跳转,该JS的activity可以使用currentActivity来找到。然后想要跳转到原生其他的Activity就比较容易。
3 React Native技术应用到APP中的优势
(1)热更新:在当前的APP应用开发中,热更新是一个非常重要的能力。如果这个应用没有热更新的能力,将意味着无法及时的展示自己想要展示的内容给用户,尤其是电商或者社交类应用,他们的APP更新能力都很频繁,没有热更新的能力,将无法及时的推送最重要的更新给用户。对于IOS开发者来说,两周以上的审核周期更是要命,每次开发迭代一个版本都必须要通过IOS的审核机制进行审核,如果采用热更新的方式,就可以绕过审核机制。因此,React Native所具有的热更新能力是非常重要的。React Native的热更新功能,主要是通过更新Bundle文件来实現。对于一个RN应用来说,Bundle文件就是要加载的前端内容。只要更新了Bundle文件,就是更新了整个APP,因此只需要做一个后台服务,这个后台服务具有上传下载Bundle文件的能力。然后在客户端每次打开的时候向服务端发送请求,看是否有最新的Bundle文件,并进行下载替换即可完成热更新的工作。
(2)代码重用度高:目前码农的成本是越来越高,因此代码的可重用是很重要的一点,代码平台无关性也是每一个技术人员所喜欢的。React Native的Android版本和IOS版本的代码可以80%以上共用,这在当前主流的原生开发中是难以置信的。同时由于React Native技术是从PC端的React技术演变而来,因此React Native的绝大多数代码也可以转化为React来使用,进行PC端的前端开发,因此,一次开发就可以三次使用大大的降低了人力成本和时间成本,对于企业来说是非常可喜的。
(3)开发效率高,漏洞修复快:因为它代码重用度高,且有热更新的优势,因此,也就有了第三个优点,开发效率比较高,且由于它的开发方法的不同,无需每次修改都要通过编译安装看效果,且采用模块化的开发,大大的提升了开发的效率。由于可实时更新Bundle文件,达到每次启动APP应用都可以使用最新的,因此可快速修复漏洞。endprint