浅析最近很火的react-native技术


作为一个IOS 原生开发人员,当听到有技术能支持跨平台IOS和安卓,并且能用JS写原生应用的时候,我被震惊了,于是开始了重学react-native 之旅,我是强忍着使用oc 或者swift 的冲动将react-native慢慢的学了一遍。 

React Native用iOS自带的JavaScriptCore作为JS的解析引擎,但并没有用到JavaScriptCore提供的一些可以让JS与OC互调的特性,而是自己实现了一套机制,这套机制可以通用于所有JS引擎上,在没有JavaScriptCore的情况下也可以用webview代替,实际上项目里就已经有了用webview作为解析引擎的实现,应该是用于兼容iOS7以下没有JavascriptCore的版本。

普通的JS-OC通信实际上很简单,OC向JS传信息有现成的接口,像webview提供的-stringByEvaluatingJavaScriptFromString方法可以直接在当前context上执行一段JS脚本,并且可以获取执行后的返回值,这个返回值就相当于JS向OC传递信息。React Native也是以此为基础,通过各种手段,实现了在OC定义一个模块方法,JS可以直接调用这个模块方法并还可以无缝衔接回调。

  所有的核心在于将OC中的接口封装起来然后暴露给JS调用,整个项目的思路是清晰的,就是使用JS调用原生的控件,把原生的控件组件化,然后统一在JS中渲染,这样在原生部分实际上只负责显示数据,显示样式,提高了原来WEBAPP的效率,从而使用户有了比之前更加良好的体验度。

整个流程:

整个项目通过RCTBridge 来连接JS和OC ,在OC中通过RCT_EXPORT_METHOD()将自己的接口暴露给JS然后再JS中调用原生接口中的方法。

    这个技术点是很好的,但是我估计不会有一个复杂APP全部都使用上react-native 做整个应用,充其量某个经常改动的部分使用这个技术,那么问题来了?

1、原生如何和JS进行交互?全部都封装成方法暴露出去么?

2、调用原生照相机、数据库,亦或者使用支付宝等第三方怎么办?

3、还是没有解决我们最想要的一套方案解决适配IOS和安卓的需求

   在问题2上面我想到了将原生的方法封装起来然后暴露给JS调用,实际上也能实现了,这些功能我估计facebook也回逐渐完善的,但是问题1 上面 ,如果将所有的方法封装在一起暴露给外面,我想这事不太好实现的,也比较麻烦,这些等等的问题给我感觉“造轮子”的难度不是一般的大。

  综合以上,我觉得如果在一些不那么复杂的应用中,或者只需要提供展示效果的页面中使用react-native 技术是非常实用的,但是如果其中有很复杂的功能,还是需要好好想想,毕竟现在react-native 这个轮子还不那么好用!!  

你可能感兴趣的:(ios开发)