我两者都用过比较长的时间。网上各种“为什么我选React放弃了Vue”或者“为什么我选Vue放弃了React”之类的文章很多,实际都没什么用,必须要真正上手做项目才会感受到它们的使用体验差别。因为有些文章本身就是带有倾向性的 – 听说过“布道师”这个职位名称么?

从我个人的使用体验看,选用Vue更省力省时间,用React明显麻烦的多。有人可能会争辩:React使用熟练一样很快!是,可是要注意,我这里说的不是绝对的开发速度,而是说同样的功能,使用Vue对比采用React,是指相对而言,哪个省事儿。用React,你得有足够的时间,足够的人力,足够的技能和耐心。用Vue开发成本低的多。

多方面粗略比较下,想起来了后面再补充:

使用难度

Vue框架是可以渐进使用的,开发门槛明显比React低很多。你可以直接在html文件中引入Vue的编译包,看下入门文档,稍微处理下代码入口就可以愉快的使用了,非常轻快。后续需要引入其它的组件、模块,也是比较容易的。它的设定更符合习惯,它没有发明太多的概念和独特的用法。Vue采用了清晰的三分法处理组件功能:结构 – template,功能 – script,表现 – style。这些概念符合开发者对html的习惯认知,理解起来毫不费力。

React不行,你至少得看完官方的一整套文档,这里:入门教程 ,然后在充满困惑和挑战中起步。别担心,后面等你爬的山还有很高。每个山头的路都很长,文档够你啃半天的。

究其原因,React框架并不是一个单纯的UI库,它创造了一个庞大的技术栈,里面充斥着各种新思想的试验品和废弃物。它发明了很多新概念,对Web技术的发展是有巨大贡献的,但是不等于说,里面的东西都是获得大家认可,都喜欢的。而且它也没什么标准一说,所有组件自由竞争。这是它的优点也是槽点。优点是总有新东西不断涌现,缺点是你需要学习和挑选。

因为是后起之秀,Vue的社区没有React的大,所以一些组件支持不如React的多,这个要承认差距。不过社区正在逐渐追赶中,差距在缩小。

设计思路

使用React,可以看做是,用户不断的修改、计算组件的状态,然后让状态从上到下流动下来,重新渲染出正确的界面的过程。因为React坚定的使用单向状态流这个模式。它是有好处的,只要状态一致,结果必然一致,可重复,非常可靠。问题在于使用过程并不怎么愉快。很多操作显得很机械、呆板,只因为规则规定如此。

状态管理是前端里面的重要内容。React的状态管理比较麻烦,redux没那么容易使用。自带的setState不是很简单么?哪里,这个小功能的坑是很多的,比如异步,比如更新后中途又被冲掉等等。

Vue的状态管理则容易很多,官方直接做了一个库,相对于React,估计10%的难度都没有。估计是跟作者开发使用过另外一个出名的前端框架:Angular有关系。Vue吸收了Angular的很多优点。

双向绑定功能是Vue的一个设计,一些其它前端库也有这个能力,但React是没有的。别小看这个小小的功能点,它影响很大。不信,你自己做一个表单,实际手把手的试一下,这个事儿带来多少的麻烦。保守的说,支持双向绑定功能,可以节省40%以上的代码量,而这些代码大部分都是机械代码,没有什么技术含量。有人说可以用别的方法模拟出来,但它毕竟不是官方的支持。

有个简单的例子,React表单输入,把输入转换成数字,这个事儿其实比想象的复杂,很容易出现bug,不信你试试看。Vue支持双向绑定,就不存在实现的需要。

React倾向于使用受控组件,这大大加重了开发负担,特别是对于比较复杂的系统,更为明显。所谓的“受控组件”,是自己管理这个组件的一切,包括行为、外观等等。相比之下,直接使用标准的HTML5组件 + CSS修饰,要容易的多。受控组件可以管理一切,但是你也得自己DIY一切,利弊自己体会。

使用React,你会发现总要不停的拆分组件,拆细,然后一堆参数传来传去。这个有好有坏。优点是拆细的组件可以实施单一职责,降低复杂度,缺点是管理麻烦。这在工程实践中,需要平衡的。

与React自创的jsx语法不同,Vue使用的是模板-Template模式。这个更符合通常的习惯。特别是以前做过后端模板开发会更为熟悉,它就是使用数据来渲染骨架里面的细节,得到可以展示的结果。React自创的jsx还有一套规则需要学习。

更进一步,React社区鼓吹“CSS-in-JS”。这个设计引发了很多争议,使用不是不可以,负担更加沉重。因为你无法按习惯的CSS模式编写样式了,需要按各种五花八门的实现规则来书写。这个地址有部分讨论:前端

还有一些UI框架,也是追随了React的模型,全部是受控组件,你需要熟悉框架的设定才能使用。而与此相对的实现是工具型。比如tailwind css。它的理念就是工具化,所有的设定都是用CSS Class实现。这个使用起来难度大大降低。

如果使用Vue,最容易选择的就是工具类UI框架。

React发展了很久,有一些历史包袱。比如最新的版本开始摒弃过去的React.Component实现模式,大力推广React.Hooks。我使用起来,感觉后者明显比前者优越,可是你又多了一个学习成本,外加一个选择困难症。

粗略估计,如果你的工程使用React实现,总体成本可能是使用Vue实现的5倍以上。计算方式:React的难度 + 组件开发难度 + UI框架使用难度 + CSS使用难度 + 其它杂项。

看到这里,可能读者会认为我一直在贬低React,鼓吹Vue,并不是这样。React足够伟大,它的创新足以在历史上留下浓重一笔,我非常的欣赏。但是别忘记,它是Facebook根据自己的需求,创造、开源、开发的,请记着这个起点。你的工程有Facebook大么?你有Facebook的工程能力么?恐怕没有几个能做到。同样的问题一样适用于谷歌。谷歌做出来的东西,即便很好,也未必适合所有人。它的起点是适合自己用。没有它的体量和工程能力,贸然使用往往跌入大坑。

macos 输入法卡顿问题的解决
谨慎测试使用Wine,它可能弄瘫你的Linux系统