前端之家收集整理的这篇文章主要介绍了
React Native系列之-简介,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Facebook发布了React Native,可以基于目前大热的开源JavaScript库React.js来开发IOS和Android原生APP,而且React Native已经用于生产环境。Facebook Frops IOS就是基于他开发的。
React Native的原理是,在JavaScript中用React抽象操作系统原生的UI组件,代替DOM元素来渲染,比如以<View>取代<div>,以<Image>替代<img>等。在幕后,React Native在主线程之外,在另一个背景线程里运行JavaScript引擎,两个线程之间通过一批量化的async消息协议来通信(有一个专门的React插件)。UI方面React Native提供跨平台的类似FlexBox的布局系统,还支持CSS子集。可以用JSX或者普通JavaScript语言,还有CoffeeScript和TypeScript来开发。有评论说,React的UI层模型要比UIKit好很多。更好的是,由于基于Web技术,开发起来可以像在浏览器里那样随时在仿真程序中查看应用运行情况,刷新一下就行,无需编译,爽吧。
有什么好处呢:
1.代码复用。
React Native 虽然强调自己不是 “Write once,run anywhere” 的框架,但是它至少能像 Google 的 j2objc 那样,在 Model 层实现复用。那些底层的、与界面无关的逻辑,相信 React Native 也可以实现复用。这样,虽然 UI 层的工作还是需要做 iOS 和 Android 两个平台,但如果抽象得好,Logic 和 Model 层的复用不但可以让代码复用,更可能实现底层的逻辑的单元测试。这样移动端的代码质量将更加可靠。其实 React Native 宣传的 “Learning once,write anywhere” 本身也是一种复用的思想。大家厌烦了各种各样的编程语言,如果有一种语言真的能够统一移动开发领域,对于所有人都是好事。
2.UI排版
我自己一直不喜欢苹果新推出的 AutoLayout 那套解决方案,其实 HTML 和 CSS 在界面布局和呈现上深耕多年,Android 也是借鉴的 HTML 的那套方案,苹果完全可以也走这套方案的。但是苹果选择发明了一个 Constraint 的东西来实现排版。在企业的开发中,其实大家很少使用 Xib 的,而手写 Constraint 其实是非常痛苦的。所以出现了 Masonry 一类的开源框架来解决这类同行的痛苦。我一直在寻找使用类似 HTML + CSS 的排版,但是使用原生控件渲染的框架。其实之前 BeeFramework 就做了这方面的事情。所以我还专门代表 InfoQ 对他进行过采访。BeeFramework 虽然开源多年,而且有 2000 多的 star 数,但是受限于它自身的影响力以及框架的复杂性,一直没有很大的成功。至少我不知道有什么大的公司采用。这次 Facebook 的 React Native 做的事情相比 BeeFramework 更加激进。它不但采用了类似 HTML + CSS 的排版,还把语言也换成了 JavaScript,这下子改变可以称作巨大了。但是 Facebook 有它作为全球互联网企业的光环,相信会有不少开发者跟进采用 React Native。不过也说回来,Facebook 开源的也不一定都好,比如 three20 就被 Facebook 放弃了,但是不可否认 three20 作为一个框架,在那个时期的特定价值。所以 React Native 即使没有成功,它也将人们关注的焦点放在了移动开发的效率上了。很可能会有越来越多相关的框架因此涌现出来。
3.MVVM
MVVM 在 Web 开发领域相当火热,而 iOS 领域的 ReactiveCocoa 虽然很火,但是还是非常小众。纠其原因,一方面是 ReactiveCocoa 带来的编程习惯上的改变实在太大,ReactiveCocoa 和 MVVM 的学习成本还是很高。另一方面是 ReactiveCocoa 在代码可读性、可维护性和协作上不太友好。而 Web 开发领域对 MVVM 编程模式的接受程度就大不相同了,在 Web 开发中有相当多的被广泛使用的 MVVM 的框架,例如 AngularJS。相信 React Native 会推动 MVVM 应用在移动端的开发。
4.动态更新
终于说到最 “鸡冻人心” 的部分了。你受够了每次发新版本都要审核一个星期吗?苹果的审核团队在效率上的低下,使得我们这一群狠不得每天迭代更新一版的敏捷开发团队被迫每 2 周或 1 个月更新一次版本。很多团队上一个版本还没审核结束,下一个版本就做好了。React Native 的语言是基于 JavaScript,这必然会使得代码可以从服务器端动态更新成为可能。到时候,每天更新不再是梦想。当然,代码的安全性将更一步受到挑战,如何有效保护核心代码的安全将是一个难题。
参考:http://blog.devtang.com/blog/2015/02/01/talk-about-react-native/