大家耳熟能详的表述如下:Vue 模板的本质其实是一种 声明式渲染 的形式,它在开发过程中提供了将组件的结构与逻辑分离的便利。
也就是说,模板 template 的存在只是为了让我们以更直观的方式描述界面的结构,然而在运行时,模板其实是不存在的,它在底层会被 Vue 编译为更高效的 渲染函数。
1. Vue 模版的本质
Vue 模板语法是基于 HTML 的拓展,它背后的运行机制是将模板编译为 JavaScript 的渲染函数。渲染函数生成 Virtual DOM(虚拟 DOM),并与真实 DOM 进行对比更新(diffing),进而提高渲染的性能。
渲染函数 render 本质上是一个 JavaScript 函数,用于描述 UI 如何与数据关联。Vue 的模板系统和 JSX、React 类似,但 Vue 的模板更加直观,不需要直接编写 JavaScript 函数。
那么 render 函数的作用是什么呢?它的主要任务是描述界面的渲染过程。通过 render 函数,Vue 可以生成虚拟节点,这些虚拟节点是对页面结构的抽象描述。也就是说,render 函数并不直接操作真实的 DOM,它返回的是一个虚拟 DOM,用于描述页面中包含的元素和内容。
在 Vue 中,常用的 h 函数(即 “createElement” 函数)负责创建这些虚拟节点,即 Vue 的虚拟节点就是在渲染函数中产生的。h 函数会根据传入的参数返回一个虚拟节点对象,而这个虚拟节点就是对页面结构的抽象表示。
编译过程:
1、模版编译:Vue 在运行时会将模板编译为渲染函数。这些渲染函数会生成虚拟 DOM。
2、虚拟 DOM 更新:当组件的状态或数据发生变化时,Vue 会重新调用渲染函数生成新的虚拟 DOM。
3、Diff 算法对比:Vue 将新生成的虚拟 DOM 与上一次生成的虚拟 DOM 进行比较,找出变化的地方。
4、真实 DOM 更新:最后,Vue 将变化更新到实际的 DOM 上。
2. Vue 模版的基本语法
1、插值表达式
插值表达式用于动态显示数据,常用 {{ }} 包裹 JavaScript 表达式:
标签:Vue,函数,渲染,DOM,糖到,编译,模板 From: https://blog.csdn.net/weixin_52648900/article/details/143095925