2019年最新补充
我重新学了一遍react.js
仍然没有体会到react究竟比vue好在哪
事件方法必须手动bind(this),state要手动初始化。无双向绑定机制,表单项和状态要手动用onChange事件绑定,并且还要单独为每个类似的事件处理写一个方法体只有setState的函数,而且还要处理event对象传入问题。某些情况下没有状态更新的component会仍然会重新渲染,然后还得手动shouldComponentUpdate来跳过一些组件的渲染。反正用起来有很多不方便的地方。jsx的写法让我想起了当年直接在html里面混合编写php的痛苦。我目前为止发现react.js除了小规模组件封装比vue稍微轻量一点(不需要单独建立一个vue文件,而是写个函数return jsx内容就好了) 其他并没有比vue方便多少。
以下是原文
我最近稍微学了一下ReactJS,感觉写起代码来很奇怪,虽然说要比直接操作dom的jquery好多了,但是总感觉代码量太大了,而且看起来不直观。
Vue.js那种模版引擎式的声明式绑定看起来更加直观,让我们这些用习惯了后端模版引擎比如说Java的JSP,php的smarty的人来写要亲切多了(比如说v-if,v-for之类的)。语法糖也多,什么methods,data区分的很明确,代码简洁而明了。
ReactJS的JSX语法看起来很怪异,render方法返回的模版本身还需要改写原生html的一些地方(比如说className之类的),数据绑定方面得自己写对象,然后自己给他加set,get方法(就像写java实体类一样很繁琐),然后通过在dom里面监听change事件,触发事件来实现数据绑定,感觉反而有点不优雅。(我还没学到redux这里,不知道这个东西是否能让这种数据绑定操作简单一点)
但是现在很多大型商业项目比如说新版知乎用的就是ReactJS,想必他一定也有自己的优势特色把,所以请问一下这个框架优点有哪些呢?相对于Vue.js来说又有什么除了我说的以外的哪些不足呢?
React 与其说是一种框架,倒不如说是一种开发范式。它的核心理念非常简单:
界面/视图就是数据结构的可视化表达
UI = f(data)
而界面/视图由组件组合而来
UI = f1(data) + f2(data) + f3(data) + ...
That's all.
React 扮演的角色就是上述公式中的 f,它完全是函数式的,组件就是函数,给它一个输入(传参),它就返回一个输出(UI)。只有理解了这种开发理念,用 React 才会得心应手。如果只是去学“语法”,仅满足于“能用”,React 确实会显得非常怪异而麻烦。
Vue 的核心理念与 React 其实是一致的,但在 API 的实现上 Vue 对于用户而言更加友好。不像 React,Vue 不会要求用户“Think in Vue”,因为不需要,Vue 是一个渐进式的框架,它并没有大幅改变用户原有的开发方式,它既可以作为插件植入老的 jQuery 项目,也可以作为整个项目的核心框架层。并且 Vue 提供了各种实用的 API,而 React 本身的 API 非常少,许多功能需要自行封装或引用现成的组件。
从能力上讲,两个框架其实差别不大,几乎不存在 React 能干而 Vue 干不了或 Vue 能干而 React 干不了的事,不都是 JS 嘛。不过 React 对于使用者的 JS 能力有一定要求,而 Vue 基本上跟 jQuery 一样前端入门一个月就开始学也没什么问题,以致于知乎上有人开始担心 Vue 大幅削弱了前端的门槛,降低了前端的水准。。。
在实际业务中,我个人更倾向于 Vue,理由就是简单,简单就是好。招人方便,就算不会,很快能上手,写出的代码就算渣,改起来也相对容易。滴滴、饿了么都是 Vue 的深度实践者,百度、京东也有相关实践,阿里直接与 Vue 合作搞了 weex,微信小程序的 API 几乎就是 Vue 的翻版。会用 Vue,同时就会了 weex 和小程序。做后台用
Element UI,简直找不到更好更高效的后台应用解决方案了。Vue 就是新时代的 jQuery,是广大中小型互联网公司的福音。
至于为什么有些团队选择 React,我个人猜测的原因是:首先他们有足够的实力;其次,决策者的精英主义情节让他们下意识的避免容易被认为“简单”的东西;第三,Vue 一开始是个人搞的业余项目,且比 React 晚了两年,还未得到足够的验证,而 React 出身不凡,并且在自家产品里有广泛实践。
总之,我看好 Vue。先学 Vue 再学 React,你会忍不住感慨:真是太麻烦了,太麻烦了。而先学 React,再学 Vue,你会忍不住感慨:真是太方便了,太方便了。