转【唐巧】的谈谈 React Native

前言

几天前,Facebook 在 React.js Conf 2015 大会上推出了 React Native(视频连接)。我发了一条微博(地址),结果引来了 100 屡次转发。为何 React Native 会引来如此多的关注呢?我在这里谈谈我对 React Native 的理解。git

一个新框架的出现老是为了解决现有的一些问题,那么对于如今的移动开发者来讲,到底有哪些问题 React Native 能涉及呢?github


人才稀缺的问题

首先的问题是:移动开发人才的稀缺。看看那些培训班出来的人吧,通过 3 个月的培训就能够拿到 8K 甚至上万的工做。在北京稍微有点工做经验的 iOS 开发,就要求 2 万一个月的工资。这说明当前移动互联网和创业的火热,已经让业界没有足够的开发人才了,因此你们都用涨工资来抢人才。而因为跨平台的框架(例如 PhoneGap,RubyMotion)都仍是不太靠谱,因此对于稍微大一些的公司,都会选择针对 iOS 和 Android 平台分别作不一样的定制开发。而 JavaScript 显然是一个群众基础更广的语言,这将使得相关人才更容易得到,同时因为后面提到的代码复用问题获得解决,也能节省一部分开发人员。编程


代码复用的问题

React Native 虽然强调本身不是 “Write once, run anywhere” 的框架,可是它至少能像 Google 的 j2objc 那样,在 Model 层实现复用。那些底层的、与界面无关的逻辑,相信 React Native 也能够实现复用。这样,虽然 UI 层的工做仍是须要作 iOS 和 Android 两个平台,但若是抽象得好,Logic 和 Model 层的复用不但可让代码复用,更可能实现底层的逻辑的单元测试。这样移动端的代码质量将更加可靠。安全

其实 React Native 宣传的 “Learning once, write anywhere” 自己也是一种复用的思想。你们厌烦了各类各样的编程语言,若是有一种语言真的可以统一移动开发领域,对于全部人都是好事。服务器


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 即便没有成功,它也将人们关注的焦点放在了移动开发的效率上了。极可能会有愈来愈多相关的框架所以涌现出来。单元测试


MVVM

MVVM 在 Web 开发领域至关火热,而 iOS 领域的 ReactiveCocoa 虽然很火,可是仍是很是小众。纠其缘由,一方面是 ReactiveCocoa 带来的编程习惯上的改变实在太大,ReactiveCocoa 和 MVVM 的学习成本仍是很高。另外一方面是 ReactiveCocoa 在代码可读性、可维护性和协做上不太友好。学习

而 Web 开发领域对 MVVM 编程模式的接受程度就大不相同了,在 Web 开发中有至关多的被普遍使用的 MVVM 的框架,例如 AngularJS。相信 React Native 会推进 MVVM 应用在移动端的开发。


动态更新

终于说到最 “鸡冻人心” 的部分了。你受够了每次发新版本都要审核一个星期吗?苹果的审核团队在效率上的低下,使得咱们这一群狠不得天天迭代更新一版的敏捷开发团队被迫每 2 周或 1 个月更新一次版本。不少团队上一个版本还没审核结束,下一个版本就作好了。

React Native 的语言是基于 JavaScript,这必然会使得代码能够从服务器端动态更新成为可能。到时候,天天更新再也不是梦想。固然,代码的安全性将更一步受到挑战,如何有效保护核心代码的安全将是一个难题。


总结

无论怎么样,这确确实实是一个移动互联网的时代,我相信随着几年的发展,移动互联网的开发生态也会积累出愈来愈多宝贵的框架,以支撑出更加伟大的 App 出现。做为一个移动开发者,我很高兴可以成为这个时代的主角,用移动开发技术改变人们的生活。


愿你们珍惜这样的机会,玩得开心~

相关文章
相关标签/搜索