关于 react native 和 weex 之我见

写在前面

我是一个主 android 开发,原生的 ios 开发也算是初窥门径,主要是有一些东西如果能一次性开发,多次使用就好了,跨平台性嘛
本文没有代码,只是一些简单的看法

跨平台的探索

这里就有几个选择了,有纯粹的网页嵌入式开发,虽然是一个解决方案,但是毕竟不原生,而且网页渲染很不靠谱的感觉,否定掉了
然后想起了react nativeweex,都号称是使用 web 语言开发,然后渲染成原生控件,而且还支持热更新!
好高端大气的样子啊!去尝试下吧

react native

首先是react native,简称 RN facebook 的开源项目,语法和文档都还算可以接受

开发环境配置

我是 jetbrain 的忠实粉丝嘛,webstorm 走起来,破解的方案自己 baidu 吧,这里就不宣传了

导航条的问题

我翻遍了所有的文档,没找到一个考虑的导航控制器,导航条虽然有一个react-navigation
但是我使用了一下这个,如果是自己写一个自己的项目还好,但是我们毕竟不是设计师,国内的设计们从来都是按照自己的方案设计导航条的啊!真没几个人是用系统自带的方案,这里用 react 的 navigation 很难自定义,我这里没找到可以修改标题颜色的方案
而且还需要吐槽一点,我认为网页端最强的一点就是百分比适配方案是 css 自带的,非常强大,而这里居然没有了,完全是 px,这样面对不同的平台真的能好好的适配吗

运行

这里就要说 webstorm 对于 react native 的支持了,帮我们全部配置好了,可以用鼠标选择 ios/android 直接运行就行了,真是 diao 啊

日志问题/debug 问题

和源生相比,android studio/xcode 都是可以直接在 ide 里直接可以看到日志的,调试相对很方便,这里就不是这样了,真的很麻烦,需要在模拟器里开 debug 模式,然后 chrome 打开网页,开发者模式,看控制台才能看见
这个时候我才知道,我们原生开发的开发环境真的比网页端的兄弟们好太多了

动态部署

可以直接在模拟器点 cmd+R 就可以了 好简单啊!
直接原地重新运行,我靠,什么时候我们源生也能这样就好了

页面跳转问题

在 android 中有 intent 开 activity 的方案,ios 中有 modal 跳转开新页面 RN 这里就不行了,因为本质上 android 是运行在同一个Activity中的,ios 的话应该是一个UIViewController中吧,然后利用内置的引擎将 js 渲染成源生代码进行展示,这里我想如果我需要跳转的话,可以自己内嵌代码,利用源生的方案跳转,然后回调到 RN 中来,理论上可行,后续我自己开发下试试看吧

小总结

RN 其实完全可以承载简单的开发任务,比如是交互性质,或者展示页面时,完全可以使用 RN 来开发,但是学习成本不算太低
另外就是当你有很繁重的任务,尤其是调用内置的系统级 API 时,如蓝牙的话如果能找到轮子还行,如果找不到那就很尴尬了

weex

阿里巴巴的项目嘛,在各种 blog 中也能见到 vue 的大名,这里想着可以尝试下

优势/劣势

对于中国人来说,这个原作者是中国人,相对来说中文的说明和解答就会很多,但是相对的,开源项目还是很需要英文社区的支持的,毕竟外国人对于开源社区的贡献从目前来说还是高于中国的

开发环境

这个开发环境相对 RN 来说没有那么好,因为 ios/andorid 的项目好像需要自己来建,这样就很不友好了,对于有原生开发经验的人来说还算友好,但是如果没有呢? 新入行的朋友想要快速的运行起项目来回很困难,这样的话对于新人来说门槛偏高,一个 vue 的开发人员转到 weex 来的话还需要学习 android/ios 的开发配置知识,不利于快速入行,我记得当前 androidstudio 只需要建立好项目,然后 run 就跑起来了

文档

这个相对完善很多,毕竟中文的嘛,但是我学到一半学习不下去的很大原因是,我试验自带的控件indicator和对应的 demo 代码,发现选中颜色和背景颜色不生效,这我就很揪心了,如果 api 更新后又不反映到文档上,让人会很困惑,自己调试了找了几个小时问题,发现居然是框架的问题,这个时候那种感觉就像吃了 shi 一样难受

语法

这个我想说,个人感觉比 RN 友好了很多,而且看起来让我想起了 css+html+js 的那种感觉,真的很友好

最后小小总结下

RN 和 weex 都是很优秀的项目,但是目前个人感觉还是不太适合开发大型项目,里面的坑现在还不好说,而且最大的问题是没有完备的开发工具,虽然说NB的程序员都是用vim开发的 但是对于我等平庸之人来说,ide 是开发必备的,因为静态的语法检查可以节省大家的时间,而且再怎么样所有的一切都是依赖在 andorid/ios 本身的平台上的

个人认为:如果目前有两端需求,又不要求界面风格统一的应用,且是新应用,很适合使用 RN/weex 开发,但是本身公司就有 ios/android 开发的情况下,不太适合使用这个来开发,原生开发很成熟,非常成熟,原则上不会出现大问题,而且解决问题的方案会很多,混合 app 的开发,第一个版本的压力会非常大!!

而 RN/weex 还处于快速迭代的过程中,目前应该还不适合接入,如果再过一年,我觉得可以考虑使用 RN 开发应用

我想这次 app store 大规模的下架热更新的事件也应该会给大家一个警钟吧

个人观点,有不同意的不要喷
你好!react native
你好!weex
希望明年再看会有不同的看法
希望我可以早日可以一套代码多端使用!

2018-07-20 更新

以上是 2017 年末的观点
我在今年 4 月左右投入了 flutter 的开发大军中,个人的选择结果,个人的倾向性不言而喻