组件的概念
组件是Vue.js框架的核心抽象单元,其设计理念遵循"分而治之"原则。每个组件都是功能完整的"微型应用",通过 模板(Template) 定义视图结构、脚本(Script) 封装业务逻辑、样式(Style) 控制视觉表现,最终组合成完整的用户界面。这种模块化开发模式带来三大核心价值:
- 高内聚性:每个组件聚焦单一功能(如按钮/表单/弹窗),代码复用率大大提升,可以做到一处封装,各处使用的效果。
- 低耦合性:通过Props/Events/API实现组件间通信,避免全局状态污染。
- 可维护性:组件树状结构使复杂页面分解为易于管理的模块单元。
vue中组件的描述
Vue组件存在两种典型实现形式:
1.单文件组件(.vue文件)
<template>
<div>{{ message }}</div>
</template>
<script>
export default {
data() { return { message: 'Hello Vue3!' } }
}
</script>
<style scoped>
div {
color: blue;
}
</style>
包含三大基础配置项:
- 模板:通过HTML描述视图结构(支持JSX扩展)
- 脚本:定义组件行为(支持单文件多组件嵌套)
- 样式:通过CSS控制渲染效果(scoped属性实现样式隔离) 在vue中组件可以是由模板、样式、行为构成,也可以直接由渲染函数加样式的模式构成组件。
- 渲染函数组件
通过render()方法直接生成虚拟DOM:
export default {
render(h) {
return h('div', this.message)
}
}
主要适用于动态生成复杂页面结构的场景。
组件的本质?
组件实际上是一组DOM元素的集合,其核心特征包括:
- 数据隔离:通过
data(){return{}}创建独立响应式数据域 - 生命周期:拥有完整的生命周期钩子(如
created/mounted/destroyed) - 组件树:通过
components选项注册形成树形结构 - 虚拟DOM代理:模板内容通过编译器转换为vnode
组件渲染过程
完整的渲染流程包含以下关键阶段:
-
初始化阶段
- 创建组件实例并初始化生命周期
- 响应式系统对
data/props进行依赖追踪
-
模板编译阶段
// 模板字符串 → 抽象语法树(AST) → 渲染函数 const ast = parse('<div>{{ message }}</div>') optimize(ast) // 标记静态节点 const render = generate(ast) -
虚拟DOM创建与更新
// 旧VNode树 const oldVNode = h('div', '旧内容') // 新VNode树 const newVNode = h('div', '新内容') // Diff算法计算差异 const patches = diff(oldVNode, newVNode) // 应用补丁更新DOM patch(container, patches) -
真实DOM挂载
通过mount()方法将根虚拟DOM节点转换为真实DOM,并插入到页面指定容器中 -
更新与销毁
- 数据变更触发
beforeUpdate/updated生命周期 - 组件卸载时执行
beforeDestroy/destroyed清理资源
- 数据变更触发