# 前言

作为还在漫漫前端学习路上的一位自学者。我以学习分享的方式来整理自己对于知识的理解,同时也希望能够给大家作为一份参考。希望能够和大家共同进步,如有任何纰漏的话,希望大家多多指正。感谢万分!


在这个系列里我希望能从零开始讲解所有关于 Vue.js 的知识, 并结合实战项目和源码分析, 来让读者可以在最后做到全面的掌握 Vue.js 框架.

在整个系列的第一篇, 我要先讲解一下到底什么是 Vue, 我们要学的到底是个什么东西.

在讲解之前, 首先结论先行: Vue 是一个采用 MVVM 架构, 通过数据驱动视图的形式来构建用户界面的渐进式框架.

看不懂没关系, 我后面会一个词一个词的讲解其概念.

让我们开始吧


# "渐进式框架" & "自底向上逐层应用"

Vue 是一套用于构建用户界面的渐进式框架。Vue 被设计为可以自底向上逐层应用

"渐进式" 的意思就是从少到多, 从弱到强, Vue 框架并不强制开发者一下子就使用它的全部.

Vue 从设计角度来讲,可以分成上图的这几大部分,但是开发者并不需要把所有的东西都学会, 或者都用上. "声明式渲染" 和 "组件系统" 是 Vue 核心库所包含内容,而 "客户端路由"、"状态管理"、"构建工具" 都有其他各自专门的解决方案。这些解决方案相互独立,Vue 将框架做了分层设计, 你可以在 Vue 核心库的基础上灵活地在不同层上使用其他方案, 而不是说一定要用 Vue 提供的.


# 数据驱动视图

Vue 是数据驱动视图的框架, 采用了 MVVM 架构. 其核心库只关注视图层, 视图与数据状态保持同步.

## 什么是 MVC 架构?

一个清晰合理的架构是一个复杂程序所必备的. MVVM 是一种软件的架构模式. 但在讲它之前, 要先了解一下 MVC 架构.

在 MVC 架构下, 软件可以分成三个部分:

  • 视图 (View): 用户界面
  • 控制器 (Controller): 业务逻辑
  • 模型 (Model): 数据保存

它们各个部分之间的通信方式如上图:

  • 用户在 View 上进行操作, 触发相应事件;
  • Controller 接到事件, 执行相应业务逻辑, 调用 Model 的接口修改数据状态;
  • Model 中新的数据发送到 View, 视图更新, 用户得到反馈;

当然上述所讲为一般而言的 MVC 模式. 在不同的项目中, MVC 的实现方法可能都不尽相同. 比如, 网页开发中, 某些项目除了允许用户在页面上触发 DOM 事件, 从而让相关事件处理函数得到执行外. 用户还可以通过在 URL 后加上不同的 # 锚点来触发 hashChange 事件, 从而让相关业务逻辑得到执行.

## 什么是 MVVM 架构?

在 MVVM 架构中, Controller 被替换成了 ViewModel. 它作为 View 与 Model 沟通的桥梁, 负责监听 Model 或 View 的修改. 由此实现了 View 和 Model 的 "双向绑定". 意思就是说, 当 Model 层数据进行修改时, ViewModel 层检测到了变化, 然后通知 View 层进行相应的视图修改. 反之, 当 View 层做了修改时, Model 层的数据也会得到相应的修改.

## 响应式的双向数据绑定

在页面中, DOM 状态其实就是数据状态的一种映射. 我们的业务逻辑应该关注于对于数据状态的操作. 当数据发生改变的时候, 框架应当帮助我们自动更新视图, 而不需要我们再手动获取 DOM 元素, 然后再对它进行修改了.

Vue 的核心是一个 "响应式的数据绑定系统". 数据和视图建立绑定之后, DOM 将与数据保持同步. 当数据被修改了, DOM 便相应的更新; 同样, 用户在视图上的操作也会自动更新相关的数据. 所有关于 DOM 的操作都被 Vue 在背后帮我们执行了, 我们只需关注于数据就好了. 这种思想也被称为 "数据驱动"

简化地表示 "数据" 与 "视图" 的关系就如下图:

## 声明式渲染 && 虚拟 DOM

Vue 提供一套基于 HTML 的模板语法, 允许开发者声明式地将真实 DOM 与 Vue 实例的数据绑定在一起

首先, "声明式" 的意思就是: 开发者告诉 Vue 框架想要什么结果, 而如何达成由 Vue 自己去做, 开发者不用管. 例如下面这段模板代码声明式地让 Vue 将 name 的数据和 <p> 标签绑定在一起:

<p>Hello {{ name }}</p>

Vue 会把这些模板编译成一个渲染函数。该函数被调用后会渲染并且返回一个虚拟的 DOM 树. 这个 "树" 的职责就是描述当前视图应处的状态。之后再通过一个 Patch 函数,将这些虚拟 DOM 创建成真实的 DOM 元素。在这个过程中, Vue 有一个 "依赖追踪系统" 会侦测在渲染过程中所依赖到的数据来源. 当数据源发生变动时, 就可以根据需要重新渲染虚拟 DOM 树。当一个新的虚拟树被渲染出来之后, Vue 会将其与老树进行对比,并最终得出应施加到真实 DOM 上的改动, 然后通过 Patch 函数施加改动。

同时, Vue 也允许用户直接跳过写模板这一层去手写渲染函数. 模板和渲染函数都各有利弊, 首先模板更贴近 HTML,有着良好的可读性的同时, 可以让我们更直观地思考语义结构,更好地结合 CSS 的书写。而直接写渲染函数,因为写的是真正的 JavaScript 代码,函数内可以进行更复杂的逻辑判断,可以选择性地返回最终要返回的 DOM 结构,从而实现一些在模板的语法限制下,很难做到的一些事情。但虽然两个都是可以选择的。在绝大部分情况下还是推荐使用模板,只有在需要复杂逻辑的情况下,才使用渲染函数。


好啦,今天的分享就告一段落啦。

如果喜欢的话就点个关注吧!O(∩_∩)O 谢谢各位的支持❗️

patch是什么意思啊_学 Vue 看这个就够了 - 什么是 Vue.js相关推荐

  1. java看什么书好_学java看什么书比较好

    1 学java看什么书比较好 随着互联网的发展,java随之横空崛起,成为了现在的热门编程语言之一,很多看到了这个行业的美好前景,都趋之若鹜奔向这个行业,因此很多人都想要学好这门java语言.那么下面 ...

  2. 学java要学vue吗_学vue之前必看

    Vue学习 1.1 vue.js是什么? ​ Vue是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层,不仅易于上手,还便于 ...

  3. 源码解读_入口开始解读Vue源码系列(二)——new Vue 的故事

    作者:muwoo 转发链接:https://github.com/muwoo/blogs/blob/master/src/Vue/2.md 目录 入口开始解读Vue源码系列(一)--造物创世 入口开始 ...

  4. 学计算机应用好还是汽车维修好,大学汽车运用与维修专业怎么样_学什么_前景好吗-520吉他网...

    时间:2019-06-23     来源:网络资源 汽车运用与维修专业怎么样_学什么_前景好吗 2019高考填报志愿时,汽车运用与维修专业怎么样.学什么.前景好吗等是广大考生和家长朋友们十分关心的问题 ...

  5. list redis 怎样做排行_学 Redis 的 7000 字小结!!!

    来源:http://rrd.me/ekrCq Redis 简介 Redis 是完全开源免费的,遵守 BSD 协议,是一个高性能的 key - value 数据库 Redis 与 其他 key - va ...

  6. python queue 调试_学Python不是盲目的,是有做过功课认真去了解的

    有多少伙伴是因为一句'人生苦短,我用Python'萌生想法学Python的!我跟大家更新过很多Python学习教程普及过多次的Python相关知识,不过大家还是还得计划一下Python学习路线!Pyt ...

  7. vue filter对象_学习vue源码(3) 手写Vue.directive、Vue.filter、Vue.component方法

    一.Vue.directive Vue.directive(id,[definition]); 1)参数 { string } id{ Function | Object } [ definition ...

  8. vue 离开页面事件_【必看】58 道 Vue 常见面试题集锦,涵盖入门到精通,自测 Vue 掌握程度...

    △ 是新朋友吗?记得先点web前端学习圈关注我哦- 1.vue优点? 答: 轻量级框架:只关注视图层,是一个构建数据的视图集合,大小只有几十 kb : 简单易学:国人开发,中文文档,不存在语言障碍 , ...

  9. vue关闭当前页面 跳转_【必看】58道 Vue常见面试题集锦,涵盖入门到精通,自测 Vue 掌握程度...

    作者:Lucky Girl https://zhuanlan.zhihu.com/p/92407628 1.vue优点? 答: 轻量级框架:只关注视图层,是一个构建数据的视图集合,大小只有几十 kb  ...

最新文章

  1. WPF中制作带中国农历的万年历
  2. 按钮button的常用属性和事件
  3. 内联函数有什么优点?内联函数与宏定义的区别?
  4. 微服务框架开发(二)—扩展spring schema
  5. Qt工作笔记-profile中INSTALLS的使用
  6. 从WINDOWS日志判断哪块硬盘好坏!!
  7. libevent: evbuffer缓冲
  8. linux ssh和sftp区别,Linux SSH和SFTP配置
  9. git push报错
  10. 劝你别把开源的数据分析项目写在简历上了!!!
  11. Gmail终于对中文用户开放注册! update:2008.5.6
  12. html横向导航二级菜单代码,横向二级导航菜单
  13. 三种命名规则之-----骆驼命名法
  14. python画立体爱心_Python画3D心形
  15. Higgs全球区块链投融资交流会(香港站)成功举办,路演项目备受瞩目
  16. 十分钟手把手教你设计简单易用的组件级考试题(单选、多选、填空、图片),建议收藏
  17. Whitelabel Error Page 的原因分析
  18. 梯度下降和正规方程的区别
  19. jquery设置cursor的属性改变光标的类型(形状)
  20. 求职第二十九天—经伟恒润(北京)

热门文章

  1. 001_Spring概述
  2. mysql不使用自增_自增ID有什么坏处?什么样的场景下不使用自增ID?
  3. php动态网页转换成html,怎么把动态的php文件转换成静态的html文件,html文件是php文件…...
  4. 细说 Lambda 表达式
  5. 云上主机SSH秘钥对连接linux注意事项
  6. c++ string 堆还是栈_5个刁钻的String面试题解析
  7. 使用Asible批量部署yum仓库
  8. Linux的shell脚本实战之检查主机IP是否存在
  9. python安装包之后仍提示_解决已经安装requests,却依然提示No module named requests问题...
  10. 调用 标签打印软件_标签打印软件如何制作陶瓷标签模板