<template>
块:定义组件的模板,使用 HTML 和 CSS 编写。<script>
块:包含组件的脚本逻辑,使用 JavaScript 编写。<style>
块(可选):定义组件的样式,可以使用 CSS、Sass 或 SCSS 编写。
编译过程
当 SFC 被编译时,Vue.js 编译器会执行以下步骤:
- 解析模板:将
<template>
块解析为一个渲染函数。 - 编译脚本:将
<script>
块编译为一个 JavaScript 模块。 - 提取样式:从
<style>
块中提取 CSS 样式,并将其转换为一个样式对象。 - 创建组件定义:将渲染函数、 JavaScript 模块和样式对象组合成一个组件定义。
组件实例化
一旦 SFC 被编译后,就可以通过 new Vue()
实例化组件。组件实例化后,Vue.js 会执行以下操作:
- 初始化组件状态:创建组件的
data()
对象,并初始化其属性。 - 创建虚拟 DOM:使用渲染函数创建组件的虚拟 DOM 表示。
- 更新真实 DOM:将虚拟 DOM 与真实 DOM 进行比较,并应用必要的更新。
SFC 的好处
使用 SFC 为组件开发提供了许多好处,包括:
- 可维护性:将组件的模板、脚本和样式放在一个文件中使代码更易于维护和重构。
- 可复用性:SFC 可以轻松地跨项目和应用程序重用,提高代码的可复用性。
- 模块化:每个 SFC 都是一个独立的模块,可以隔离组件的逻辑和外观。
- 开发效率:能够在一个文件中定义组件的所有方面可以提高开发效率,减少上下文切换。
高级特性
除了基本特性外,Vue.js SFC 还支持一些高级特性,如:
- 作用域 CSS:
<style>
块中的 CSS 规则只作用于当前组件,防止样式泄漏到其他组件中。 - 预处理器:支持 Sass、SCSS 和 Stylus 等 CSS 预处理器,使样式编写更灵活。
- 自定义块:可以使用
<custom-block>
定义自定义块,用于在不同的组件中共享代码。 - 热重载:在开发过程中,对 SFC 的任何更改都会触发热重载,自动更新组件而不丢失状态。
总结
Vue.js 的单文件组件是一种革命性的特性,通过将组件的模板、脚本和样式放在一个文件中,它简化了组件开发并提高了代码的可维护性和可复用性。高级特性,如作用域 CSS 和热重载,进一步增强了 SFC 的功能,使其成为前端开发中一个强大的工具。