十三张图浅谈Vue核心概念

简介: 十三张图浅谈Vue核心概念

image.png


浅谈 DOMVirtual DOMrender functions,然后是Vue的三个核心模块,最后通过一个简单的例子来了解Vue响应式原理。


DOM



简而言之:DOM是浏览器用于更改屏幕显示内容的API。


如果我们将HTML加载到浏览器中,浏览器会创建这些DOM结点以树结构显示我们的网页:


<html>
  <head>
    <title>My title</title>
  </head>
  <body>
    <h1>A heading</h1>
  </body>
</html>


image.png


我们可以用JavaScript来操作这一系列映射成的DOM结点,比如修改h1标题:


let item = document.getElementsByTagName("h1")[0];
item.textContent = "New Heading";


image.png


DOM树可以有成百上千个结点,像Vue这样的框架就是用来帮我们避免大量重复繁杂的JS调用。


但是查找和更新数千个DOM Nodes显然会让浏览器的渲染速度变慢,于是 Virtual DOM 出现了。


Virtual DOM & Render function


Virtual DOM是用JavaScript对象来表示DOM的方式。


例如一个 div 就可以用一个JS对象来表示,而Vue可以获取这个 Virtual Node 并将其mount(挂载)到DOM上来更新我们在浏览器中看到的内容。


image.png

其实中间还有一个步骤,Vue会根据我们的HTML模板创建一个 render function 用来返回VNode:

image.png


当组件更新的时候,渲染函数会重新运行并创建一个新的虚拟节点,Vue将新的结点和旧的结点进行比较后在网页上更新,diff算法算是整个虚拟DOM中最关键的部分,但我不了解就不说了:


image.png


Vitrual DOMActual DOM 可以看成建筑蓝图到实际建筑的映射关系。

假如我想在建筑的某层楼里增加一些家具并改动一下布局,有两种办法:


  1. 拆除整层楼然后重建(too stupid)。
  2. 创建新的蓝图与旧图进行对比,然后以最小代价更新。

方式2就是 Virtual DOM 的工作方式,并且Vue3在更新方面变得更加高效。


3 core modules


  1. Reactivity Module
    允许我们创建可以观察变化的JS响应式对象,当这些对象的代码运行的时候,它们会被跟踪以便发生数据变化时改变运行状态。
  2. Compliler Module
    获取HTML模板将它们编译成render function


image.png


Renderer Module


包含将组件渲染到网页上的三个不同阶段的代码,相信你看了上文后很好理解这三个阶段:


image.png


一个例子



image.png


首先编译模块将HTML编译成 render function :


image.png


初始化 reactive object :


image.png


然后进入 renderer module 的第一个阶段,调用引用 reactive object 的 render function,观察这个响应式对象的变化,渲染函数会返回一个VNode:


image.png


然后是挂载阶段 mount phase,使用VNode调用挂载函数来创建网页:


image.png


如果我们监视的对象发生任何变化,会再次调用渲染函数创建一个新的VNode,然后一起送到 patch function 根据需要更新网页:


image.png


总结



刚开始学习Vue总结的笔记类型的文章,有错漏可以评论告知。

参考视频:




目录
相关文章
|
10天前
|
JavaScript
vue使用iconfont图标
vue使用iconfont图标
70 1
|
21天前
|
JavaScript 关系型数据库 MySQL
基于VUE的校园二手交易平台系统设计与实现毕业设计论文模板
基于Vue的校园二手交易平台是一款专为校园用户设计的在线交易系统,提供简洁高效、安全可靠的二手商品买卖环境。平台利用Vue框架的响应式数据绑定和组件化特性,实现用户友好的界面,方便商品浏览、发布与管理。该系统采用Node.js、MySQL及B/S架构,确保稳定性和多功能模块设计,涵盖管理员和用户功能模块,促进物品循环使用,降低开销,提升环保意识,助力绿色校园文化建设。
|
2月前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱前端的大一学生,专注于JavaScript与Vue,正向全栈进发。博客分享Vue学习心得、命令式与声明式编程对比、列表展示及计数器案例等。关注我,持续更新中!🎉🎉🎉
51 1
vue学习第一章
|
2月前
|
JavaScript 前端开发 索引
vue学习第三章
欢迎来到瑞雨溪的博客,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中的v-bind指令,包括基本使用、动态绑定class及style等,希望能为你的前端学习之路提供帮助。持续关注,更多精彩内容即将呈现!🎉🎉🎉
48 1
|
2月前
|
JavaScript API 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
2月前
|
JavaScript 前端开发 开发者
Vue是如何劫持响应式对象的
Vue是如何劫持响应式对象的
39 1
|
2月前
|
JavaScript 前端开发 API
介绍一下Vue中的响应式原理
介绍一下Vue中的响应式原理
37 1
|
2月前
|
JavaScript 前端开发 开发者
vue 数据驱动视图
总之,Vue 数据驱动视图是一种先进的理念和技术,它为前端开发带来了巨大的便利和优势。通过理解和应用这一特性,开发者能够构建出更加动态、高效、用户体验良好的前端应用。在不断发展的前端领域中,数据驱动视图将继续发挥重要作用,推动着应用界面的不断创新和进化。
|
2月前
|
JavaScript 前端开发 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
2月前
|
存储 JavaScript 前端开发
介绍一下Vue的核心功能
介绍一下Vue的核心功能