前端开发框架从最开始的jquery时代,到后来backbone,angular1,再到现在vue和react两分天下,也才用了不到十年的光景。
最开始jquery是为了解决浏览器兼容性的问题而火起来的,准确的说它只是一个库,而不能成为框架。但随着前端页面的复杂度的增加,渐渐数据驱动和mv*的思想开始形成,有了backbone,angular等先驱。再之后随着AST,Bable,webpack等技术的兴起,一个逐渐晚上的前端框架体系也随之建立了起来,如今最入门的就是vue和react了。
但由于vue和react要解决的事情和思想非常相近,所以导致很多人在选择到底使用哪种框架进行学习和开发的时候异常头痛。这个问题还是比较难解决的,仁者见仁智者见智,目前看来不仅公司和公司之间选择不同,就连很多大厂在部门之间也存在分歧,一个公司里很多部门都在使用不同的框架。
今天我就我自己的经验来分析一下这两款框架的区别,看看你看重那个方面。
1.模板引擎:vue的视图模板采用类html的写法加上自己的指令与自定义属性组成,在多数情况下是要比react的JSX写法开发效率高和清晰的。但是在复杂场景下,类html的写法有时候很比较麻烦或者难以胜任,这个时候就凸显出JSX的语言表现力的丰富了。不过vue目前也支持jsx的写法。
2.样式:vue的样式和模板可以写在同一个文件里,而react的主流做法还是要单写一个样式文件,虽然区别不大,但还是更喜欢能少写几个文件的感觉。另外vue的class有多种写法,sting/object/array都可以还能自动merge,体验很好。而react本身不行,需要借助类似classname的库来实现。
3.数据响应逻辑:vue使用代理/拦截的方式使得我们直接修改data就可以了,而react需要使用setState api来实现。另外由于vue的实现方式,所以vue知道我们修改了哪些东西,并且还有watch/computed等钩子公开发人员使用,而反观react就比较不人性化了,需要我们自己在业务逻辑层diff才知道。
4.配套设施:这里指的就是常用的配套库(全家桶),vue基本上是官方给了我们一个最佳实践,直接按照官方推荐的全家桶来构建我们的应用就够了,而react就比较开发,对于社区依赖更多,所以相关的配套设施需要我们自己去找去接,社区大神们的思想各不相同,所以比vue要费心。比如我要用redux还需要引个react-redux,而且居然还不支持异步,我还得引个redux-thunk,可能我还得跟redux-saga对比下,较真一点的可能还不敢人云亦云,还要亲自看看源码才行,另外明知道我是个选择困难症患者还要有个mobx来捣乱。可能当我找到自认为是最佳实践的方案的时候,项目已经黄了或者社区又出了新的方案(哭晕在厕所 =。=...)
5.性能:在vue1.0时代,vue的性能的确是比react要弱的,但进入2.0时代,vue果断借鉴了一大波react在性能方面的优化经验(这里不论这种做法怎么样啊),反正瞬间就把性能基本给拉平了。再加上react性能需要非常有经验,非常注意你自己代码的写法才能发挥的出来,比如你要配合reselect库或者对purecomponent/shouldupdate等很了解。否则你写出来的应用的性能必定是奇慢的,而vue你其实不必关注那么多,这得益于他的数据响应的内部实现。在绝大多数情况下你不需要怎么关注你的写法是否导致了很多多余的计算和渲染开销。
6.使用人群:这点是vue的说大不大说小不小的命门,vue在国外是没有react知名的,所以在国外react是一枝独秀,导致你学习vue可能无法跟世界接轨。另外一个就是不知道曾几何时,面试官有意无意的会透露出如果你只会vue,那你一定是个初学者是个low逼....一方面原因的确vue的上手难度要比react小很多,刚才也说了很多vue不需要关心这关心那,所以新手学习vue的更多。但我其实很不能理解这点!!为什么学习vue就要比学习react低人一等。为啥新手学的多的东西就不能是好东西,非的是晦涩难懂,很难掌握的东西才能凸显出你的与众不同和不凡么?我觉得这个价值观是非常的扭曲的。在我看来不说设计思想,就单说vue的实现方式我认为是要比react高级和先进的。
好了,说了真么多,我猜你可能还是不知道要选哪个框架,哈哈哈... 真是个世界性难题啊。 这么说吧,个人认为,抛开偏见,中小型项目我推荐使用vue来开发,原因很简单
1.需要考虑的事情少,
2.开发效率高,
3.比较初级的工程师也可以轻松胜任。
而对于大型项目,还是推荐react去开发,1.你的掌控力更多。2.由于一不小心就会导致性能下降,所以会迫使你去好好组织你的代码,所以写出来的东西更规范,可维护性更高。这个对于大型项目是至关重要的。谁也不希望一个好几年写出的大型项目因为走了几个老人就无法维护了吧。
如今的 Web 前端已被 React、Vue 和 Angular 三分天下,尽管现在的 jQuery 已不再那么流行,但 jQuery 的设计思想还是非常值得致敬和学习的,特别是 jQuery 的插件化。
受控组件与非受控组件在官网与国内网上的资料都不多,有些人觉得它可有可不有,也不在意。这恰恰显示React的威力,满足不同规模大小的工程需求。
一般在传统模式下,我们构建前端项目很简单。就是下载各种js文件,如JQuery、Echart等,直接放置在html静态文件。Webpack则是JavaScript中比较知名的打包工具。这两个构建工具构成了React应用快速搭建的基础。
Gatsby能快速的使用 React 生态系统来生成静态网站,可以结合React Component、Markdown 和服务端渲染来完成静态网站生成让他更强大。
React推出后,出于不同的原因先后出现三种定义react组件的方式,殊途同归;具体的三种方式:函数式定义的无状态组件、es5原生方式React.createClass定义的组件、es6形式的extends React.Component定义的组件
React主要思想是通过构建可复用组件来构建用户界面,每个组件都有自己的生命周期,它规定了组件的状态和方法需要在哪个阶段改变和执行。所谓组件就是有限状态机,,表示有限个状态以及在这些状态之间的转移和动作行为的模型。
React 相关的优化:使用 babel-react-optimize 对 React 代码进行优化,检查没有使用的库,去除 import 引用,按需打包所用的类库,比如 lodash 、echarts 等.Webpack 构建打包存在的问题两个方面:构建速度慢,打包后的文件体积过大
这篇文章主要介绍React Router定义路由之后如何传值,有关React和React Router 。react router中页面传值的三种方法:props.params、query、state
react 高阶组件简单的理解是:一个包装了另一个基础组件的组件。高阶组件的两种形式:属性代理(Props Proxy)、反向继承 (Inheritance Inversion)
React 支持一种非常特殊的属性 Ref ,你可以用来绑定到 render() 输出的任何组件上。这个特殊的属性允许你引用 render() 返回的相应的支撑实例( backing instance )。这样就可以确保在任何时间总是拿到正确的实例
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!