前言


我们使用Vue和React已经很长一段时间了 ,两个框架上实践代码量都在10万行以上。不得不说两者

都是很nice的,帮助开发者减少很多工作量,这类框架是现代化前端开发必备的。然而Vue和React

两者之间的选择并不像选择苹果或香蕉一样简单, 两者在工程实践上的差距让我们逐渐放弃了Vue。

为什么都在说 React 比 Vue 难?_java


为什么都在说 React 比 Vue 难?_java_02

常见摇摆问题、观点


Vue或React文档更丰富?


两者都有丰富的文档(包括中文文档),Vue 文档、React 中文,所以不用担心你四六级都过不了,看不

懂文档,这都是有眼就行的事~当然,如果你提前懂点javascript相关知识也是大大滴好,ES6 语法更

佳。

Vue的话需要记住各种指令,还有属性细节,兔不了经常查文档。React 相对简单,记住:“函数入口是

props,出口是html"就行了。

为什么都在说 React 比 Vue 难?_java_03


React学习门槛高?


这个也不是你选择框架的原因,如果这个也可以作为原因的话,我觉得是因为你懒,给自己找了借口。

据我自己学习、实践总结,两个框架都很简单,有手就行,有脑就会,不见得会React就比Vue牛逼很

多。两者都提供了相应脚手架,方便用户使用:


vue

为什么都在说 React 比 Vue 难?_java_04

react

为什么都在说 React 比 Vue 难?_java_05


傻瓜式使用,无限div就完事了。

为什么都在说 React 比 Vue 难?_java_06


大项目用React,小项目用Vue?


怎么说呢?这个就是万精油结论,没有参考意义。你如何定义一个项目是大项目?超过xx万行代码?后

端API超过xxx个?无论什么项目,都有做"大”的可能,只要正常运营,你就得持续维护,补充新增的需

求。框架的可持续演进更为重要。

当然我可以这么跟你说,React 适不适合“小"项目我不知道,但是Vue不适合“大"项目,业务代码超过5

万行之后问题明显,后面会详细说这点。



为什么都在说 React 比 Vue 难?_java_02

区别



为什么都在说 React 比 Vue 难?_java_08

今天我们就来分析一下这两款框架的区别


模板引擎:

vue的视图模板采用类html的写法加上自己的指令与自定义属性组成,在多数情况下是要比react的JSX写法开发效率高和清晰的。但是在复杂场景下,类html的写法有时候很比较麻烦或者难以胜任,这个时候就凸显出JSX的语言表现力的丰富了。不过vue目前也支持jsx的写法。


样式:

vue的样式和模板可以写在同一个文件里,而react的主流做法还是要单写一个样式文件,虽然区别不大,但还是更喜欢能少写几个文件的感觉。另外vue的class有多种写法,sting/object/array都可以还能自动merge,体验很好。而react本身不行,需要借助类似classname的库来实现。


数据响应逻辑:

vue使用代理/拦截的方式使得我们直接修改data就可以了,而react需要使用setState api来实现。另外由于vue的实现方式,所以vue知道我们修改了哪些东西,并且还有watch/computed等钩子公开发人员使用,而反观react就比较不人性化了,需要我们自己在业务逻辑层diff才知道。


配套设施:

这里指的就是常用的配套库(全家桶),vue基本上是官方给了我们一个最佳实践,直接按照官方推荐的全家桶来构建我们的应用就够了,而react就比较开发,对于社区依赖更多,所以相关的配套设施需要我们自己去找去接,社区大神们的思想各不相同,所以比vue要费心。比如我要用redux还需要引个react-redux,而且居然还不支持异步,我还得引个redux-thunk,可能我还得跟redux-saga对比下,较真一点的可能还不敢人云亦云,还要亲自看看源码才行,另外明知道我是个选择困难症患者还要有个mobx来捣乱。可能当我找到自认为是最佳实践的方案的时候,项目已经黄了或者社区又出了新的方案(哭晕在厕所 =。=...)


性能:

在vue1.0时代,vue的性能的确是比react要弱的,但进入2.0时代,vue果断借鉴了一大波react在性能方面的优化经验(这里不论这种做法怎么样啊),反正瞬间就把性能基本给拉平了。再加上react性能需要非常有经验,非常注意你自己代码的写法才能发挥的出来,比如你要配合reselect库或者对purecomponent/shouldupdate等很了解。否则你写出来的应用的性能必定是奇慢的,而vue你其实不必关注那么多,这得益于他的数据响应的内部实现。在绝大多数情况下你不需要怎么关注你的写法是否导致了很多多余的计算和渲染开销。


使用人群:

这点是vue的说大不大说小不小的命门,vue在国外是没有react知名的,所以在国外react是一枝独秀,导致你学习vue可能无法跟世界接轨。另外一个就是不知道曾几何时,面试官有意无意的会透露出如果你只会vue,那你一定是个初学者是个low逼....一方面原因的确vue的上手难度要比react小很多,刚才也说了很多vue不需要关心这关心那,所以新手学习vue的更多。但我其实很不能理解这点!!为什么学习vue就要比学习react低人一等。为啥新手学的多的东西就不能是好东西,非的是晦涩难懂,很难掌握的东西才能凸显出你的与众不同和不凡么?我觉得这个价值观是非常的扭曲的。在我看来不说设计思想,就单说vue的实现方式我认为是要比react高级和先进的。


好了,说了真么多,我猜你可能还是不知道要选哪个框架,哈哈哈.... 真是个世界性难题啊。


这么说吧,个人认为,抛开偏见,中小型项目我推荐使用vue来开发,原因:

  1. 需要考虑的事情少。

  2. 开发效率高。

  3. 比较初级的工程师也可以轻松胜任。

而对于大型项目,还是推荐react去开发,原因:

  1. 你的掌控力更多。

  2. 由于一不小心就会导致性能下降,所以会迫使你去好好组织你的代码,所以写出来的东西更规范,可维护性更高。这个对于大型项目是至关重要的。谁也不希望一个好几年写出的大型项目因为走了几个老人就无法维护了吧。