渐进式
Vue是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。
—— Vue官网介绍
什么是渐进式呢?
简单地说,渐进式的概念是分层设计,每层可选,不同层可以灵活接入其他方案架构模式。
举个例子,我们要买一台电脑,店家给我们提供了一个IBM。
官方可能会提供windows作为可选,我们也可以在电脑上安装我们自己喜欢的Ubuntu。
装完系统后,官方可能还提供了一系列的“装机必备”,浏览器、编辑器、播放器等等,我们可以选择使用,也可以不用,然后在应用市场选择我们喜欢的软件安装。
在这个例子里面,官方提供的产品分为电脑裸机/操作系统/软件这3层,每层都是可选的,可以接入其他的产品。这就是一个渐进式的产品。
渐进式的最大好处就是灵活,可以根据不同场景做定制。
那么Vue分为哪几层呢?参考一个经典的网图
- declarative rendering(声明式渲染)
- component system(组件系统)
- client-side routing(前端路由)
- state management(状态管理)
- build system(构建系统)
你可以这样使用Vue
- 你可以使用vue的声明式渲染,通过new Vue(),传入模板、挂载点和数据渲染一块视图,但不用其他的功能。
- 你可以使用jquery设计自己的组件,也可以使用vue设计组件。
- 你可以使用前端路由,或者不用vue-router,或者自己实现自己的router。
- 状态管理你可以使用redux,当然使用vuex也可以很方便地接入。
- 你可以自己使用webpack或者其他构建工具搭建你的项目,也可以选择使用vue-cli。
如果你想在已有的项目中引入Vue,或者对前端路由、状态管理的社区工具有自己的偏好,那么Vue一定比Angular更适合你。
Vue和React的对比
关于Vue和其他框架对比,可以参考Vue官网的说明对比其他框架。
我们现在看下Vue和React之间的比较。
首先,Vue和React在很多地方都是相似的,对于大部分场景,并没有React能做到而Vue不能做到,或者Vue能做到,而React不能做到的事情。所以决定Vue和React之间的选型的因素更多是团队成员的熟练程度、老项目的情况、整个公司的环境、团队的沉淀、甚至领导的个人偏好。
Vue和React相同点:
- 使用 Virtual DOM
- 提供了响应式 (Reactive) 和组件化 (Composable) 的视图组件。
- 将注意力集中保持在核心库,而将其他功能如路由和全局状态管理交给相关的库。
- 性能、包体积大小不是决定因素。
- 组件复用方面也基本是对等,render props ≈ slot;高阶组件 ≈ mixin。
- 逻辑复用方面 hooks ≈ composition API。
值得一提的是,React的Fiber目前Vue还没有相关的能力对应,因此大规模的应用并且对运行时性能有很高要求的场景,React更胜一筹。
Vue和React的区别主要体现在风格和细节上:
使用上
- React的API简洁,Vue的API更多,因此使用Vue编写代码可能更少。
- Vue更容易上手(因为帮开发者做了很多事情,computed、双向绑定等),React要实现相同功能需要用户手操作,例如需要通过受控组件来实现表单的数据同步,不如Vue的v-model语法糖更便捷。而且Vue的模板语法更贴近原生,因而更容易接受和理解。
- React虽然API简单,但也因此在某些场景需要一些实践来优化,如shouldComponentUpdate,Vue使用数据劫持,能够做到改变了才触发渲染,更精准。
- 模板语法 VS JSX语法,其实Vue也可以支持JSX,JSX表达能力更强,模板语法更直观。
- React有一些主张,例如纯函数等,对编写项目有一定的限制,有的观点认为React规范能尽可能保证项目少出bug,所以更适合大型项目。
- react社区较大,Vue及周边都主要是官方在维护,更稳定一些。
- 超大规模的首屏渲染上React有一些优势,因为Vue需要做一些初始化工作。
- React组件是继承React.Component,Vue是对象,因此React可以实现基于继承的组件复用(虽然并不推荐),而Vue不行。
原理上
React和Vue在响应式的原理上有所不同,Vue是通过数据劫持,实现当数据变化时候响应式更新,React是在setState时候diff组件树。
Vue和Jquery的对比
__
- 目标不同,JQuery关注简化js的DOM操作和浏览器兼容性处理,帮助开发者更简单地操作DOM,Vue关注用户如何组织代码,让开发者不需要操作DOM,可以更好地组织代码,提升项目的可读性和可维护性。
- 对于大型项目JQuery未规定代码组织形式,未提供组件化的标准,因此多人开发时候不同风格代码混杂,很容易造成代码混乱,相对而言,Vue就更适合大型的项目。
- 如果需要在项目中引入组件库的话,Vue项目的组件库更标准化,JQuery的组件库则形式多样,很难和自己的项目风格保持一致。
- 跨平台,Vue使用声明式渲染,通过虚拟DOM映射到真实DOM,可以实现跨平台,而JQuery没有这种能力。
- 由于Vue支持声明式渲染,因此可以做到服务端渲染和客户端代码同构,降低项目复杂度和学习成本(不需要再学习一门模板语言)。JQuery项目实现服务端渲染还要依赖一个后端的模板语言。
- 发展趋势不同,随着浏览器标准化和前端项目的复杂度逐步提升,JQuery的应用场景在一点点减少,Vue作为新一代前端框架正在蒸蒸日上。