Vue.js 组件系统是构建 Vue 应用程序的基础。它使开发人员能够创建可重用、自包含的单元,这些单元封装了 HTML、CSS 和 JavaScript 功能。本文档涵盖了 Vue 组件系统的架构、生命周期和实现细节。
有关驱动组件的响应式系统的信息,请参阅响应式系统。有关 Vue 如何将组件渲染到 DOM 的详细信息,请参阅虚拟 DOM 实现。
Vue 组件系统的核心是提供一种构建封装的、可重用 UI 元素的方式。Vue 中的组件是具有预定义选项的 Vue 实例。它们可以嵌套、组合,并可以通过明确定义的接口相互通信。
来源:types/vue.d.ts45-104 types/options.d.ts168-245
Vue.js 中的组件可以通过多种方式定义。最常见的方法是使用 ComponentOptions 接口,它提供了创建组件的配置对象。
来源:types/options.d.ts168-245 types/vue.d.ts45-104 types/vue.d.ts164-444
Vue 提供两种注册组件的方式:
来源:types/vue.d.ts348-420 types/test/options-test.ts21-26
Props 是用于从父组件向子组件传递数据的自定义属性。它们在父子组件之间形成单向向下绑定。
Vue 支持多种 Prop 验证选项:
| 选项 | 描述 |
|---|---|
类型 | 数据类型验证 (String, Number, Boolean, Array, Object, Function, Symbol) |
必需 | Prop 是否必需 |
默认 | 未提供时的默认值 |
validator | 自定义验证函数 |
来源:types/options.d.ts277-291 types/test/options-test.ts28-43 types/test/options-test.ts73-91
Vue 组件有一系列生命周期钩子,允许你在组件生命周期的特定阶段执行代码。
来源:types/options.d.ts202-213 types/test/options-test.ts253-270
创建:
beforeCreate: 在数据观测和事件/侦听器设置之前created: 在数据观测和事件/侦听器设置之后挂载:
beforeMount: 在 DOM 挂载之前mounted: 在 DOM 挂载之后,并且 el 被新创建的 vm.$el 替换之后更新:
beforeUpdate: 当数据更改时,在 DOM 打补丁之前updated: 在数据更改导致 DOM 打补丁之后销毁:
beforeDestroy: 在销毁之前(移除侦听器、子组件、事件监听器)destroyed: 在销毁完成之后附加钩子:
activated: 当 <keep-alive> 内的组件被激活时deactivated: 当 <keep-alive> 内的组件被停用时errorCaptured: 当捕获到来自后代组件的错误时serverPrefetch: 用于服务器端渲染(Vue 2.6 中添加)来源:types/options.d.ts202-213 types/test/options-test.ts253-270
Vue 组件通过多种方式进行通信:
父组件使用 Props 向子组件传递数据。Props 在子组件的选项中定义,并通过 HTML 属性传递。
来源:types/options.d.ts277-299 types/test/options-test.ts28-43
子组件发出事件,父组件可以侦听这些事件。
来源:types/vue.d.ts99-101 types/test/vue-test.ts54
对于深度嵌套的组件层次结构,Vue 提供了 provide 和 inject 选项。
来源:types/options.d.ts227-228 types/options.d.ts343-349 types/test/options-test.ts322-339
函数式组件是无状态、无实例的组件,渲染效率更高。它们接收 props 和 context 作为参数,并返回虚拟节点。
函数式组件通过 functional: true 选项定义。
来源:types/options.d.ts247-264 types/options.d.ts266-275 types/test/options-test.ts421-462
Vue 通过异步组件支持组件的按需加载。这对于大型应用程序中的代码分割特别有用。
异步组件可以通过以下几种方式定义:
来源:types/options.d.ts37-76 types/test/options-test.ts465-477 types/test/options-test.ts498
Vue 组件可以通过两种方式渲染内容:
模板使用带有 Vue 特定指令和语法的 HTML。
渲染函数提供了对 Vue 虚拟 DOM 的程序化访问。
来源:types/options.d.ts193-200 types/vue.d.ts103 types/test/options-test.ts186-247
Vue 组件系统建立在一组核心模块之上,这些模块处理组件功能的不同方面。
来源:.github/CONTRIBUTING.md98-117 src/core/instance/proxy.ts1-98
当组件被创建时,Vue 遵循以下初始化过程:
beforeCreate 钩子created 钩子el 选项,则挂载组件来源:types/options.d.ts168-245 .github/CONTRIBUTING.md112-116
Vue 提供了几种扩展和重用组件功能的方式:
Mixins 是一种灵活的方式,用于在 Vue 组件中分发可重用功能。
来源:types/options.d.ts236 types/vue.d.ts430 types/test/options-test.ts305
extends 选项允许一个组件继承另一个组件。
来源:types/options.d.ts241 types/test/options-test.ts307 types/test/vue-test.ts167-187
插件在全局层面扩展 Vue 的功能,通常添加全局方法、属性、指令或组件。
来源:types/plugin.d.ts1-8 types/vue.d.ts422-429 types/test/plugin-test.ts1-21
Vue 2.7 包含了对组件的全面 TypeScript 支持,为各种组件 API 提供了类型定义。
来源: types/vue.d.ts164-444 types/options.d.ts15-25 types/options.d.ts168-245 types/options.d.ts247-264 types/options.d.ts37-76
Base、App 或 V)The 前缀开头来源: README.md42-48 .github/CONTRIBUTING.md98-117
Vue 的组件系统是 Vue 组合模型的基础,它使开发者能够用小巧、独立且可复用的代码块构建复杂的 UI。理解组件系统对于有效使用 Vue 至关重要。
有关相关主题的更多信息,请参阅
来源: README.md42-48 types/vue.d.ts45-104 types/options.d.ts168-245