叁.1.2 React、Vue和Angular对比
React 的哲学是:如无必要,勿增实体。Vue 的哲学是:什么好用,给你什么。 Vue 会自动帮你绑定 this,React 不会,因为 JS 能做; Vue 会自动帮你合并 class 和 style,React 不会,因为 JS 能做; Vue 会给你的 data 创建 getter/setter,React 不会,因为 JS 能做; Vue 会给你提供 v-if / v-for / v-show,React 不会,因为 JS 能做; Vue 会给你提供 computed / watch / methods,React 不会,因为 JS 能做。那么 React 到底提供了什么? 只提供了一条让你用原生 JS 解决所有 UI 问题的途径。很多新人反馈: Vue 用久了,好像不会写高级的 JS 了,只会一些简单的 ,居然就能完成工作。 而 React 用久了,就发现 JS 的语法特性真多啊,学都学不过来。
你会发现 Angular 在逐渐的弥补自身框架的不足,其他框架也在弥补他们自身的不足,他们都在互相吸取,互相学习,大家最终会越来越趋同。喜欢装饰器,Class Component,Service Class 风格的,可以选择 Angular。喜欢纯函数,Function Component,Hooks 的,可以选择 React。没有啥偏好的使用 Vue,想用啥用啥。
Angular 的初始曲线对于搞 java 的人来说确实不高,因为那一套概念都是 java 里面有的,而且搞 java 的都已经习惯繁琐了。但是对于不搞 java 的人来说,就很烦了,更关键的是在我看来前端根本就不应该学 java 那一套。Angular 的后续曲线也不低,因为它的可优化性比较糟糕,以至于你不理解它的内部运作原理就很难避免各种性能坑。
React 上手的曲线也看人。对于习惯了服务端模板的人来说,要接受 JSX 是一个挑战;但是对于搞函数式的人来说,简直就是太自然了,因为 JSX 能让你把模板看做一个纯函数。过了这个坎后上手写两个例子,React 还是相对简单的。但是这也是个假象。接下来要搞『正经』的 React 应用了,突然出现了 Node,CommonJS, Webpack 一堆东西。写过 Node 的人会觉得哦哦,太自然了。没接触过 Node 的人就像没接触过 java 的人初学 Angular 一样:这些都是什么鬼。再往下,终于把构建环境搭好了,这时候你会发现 React 文档里的东西你已经也基本看完了,你以为你这就叫『学会 React』了?其实这时候你还是不知道怎么用 React 写一个应用,因为 React 本身不管这些事情,所以你要开 始跳入 React 社区的大坑,开始学习 react-router, react-hot-reload, Flux 及其 N 种实现 (voronianski/flux-comparison · GitHub) , CSS in JS 及其 N 种实现 (https://github.com/MicheleBertoli/css-in-js),Immutable-js, GraphQL, Relay... 还有 context 这种大家都在用但是没有官方文档的功能...(现在终于有文档了)用 Redux 又开始一堆概念了,actions, action creators, reducers, containers, higher order components... 然后现在又开始配着 generator 搞 redux-saga,搞着搞着你可能还会被 Clojure/Elm 吸引过去,跳入函数式的大坑... 这 个曲线比起 Angular,只能说有过之而无不及... 当然,因为学习过程中多了很多可以用来装逼的资本,还是有一定的激励效果的,不像 Angular 学了半天也没什么能吹的。