首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
第 7 章 处理用户交互
7.1 事件的监听与处理
7.1.1 事件监听示例
7.1.2 多事件处理
7.1.3 事件修饰符
7.2 Vue中的事件类型
7.2.1 常用的事件类型
7.2.2 按键修饰符
7.3 实战一:随鼠标移动的小球
7.4 实战二:弹球游戏
第 8 章 组件基础
8.1 关于Vue应用与组件
8.1.1 Vue应用的数据配置选项
8.1.2 定义组件
8.2 组件中数据与事件的传递
8.2.1 为组件添加外部属性
8.2.2 处理组件事件
8.2.3 在组件上使用v-model指令
8.3 自定义组件的插槽
8.3.1 组件插槽的基本用法
8.3.2 多具名插槽的用法
8.4 动态组件的简单应用
8.5 实战:开发一款小巧的开关按钮组件
第 9 章 组件进阶
9.1 组件的生命周期与高级配置
9.1.1 生命周期方法
9.1.2 应用的全局配置选项
9.1.3 组件的注册方式
9.2 组件props属性的高级用法
9.2.1 对props属性进行验证
9.2.2 props的只读性质
9.2.3 组件数据注入
9.3 组件Mixin技术
9.3.1 使用Mixin来定义组件
9.3.2 Mixin选项的合并
9.3.3 进行全局Mixin
9.4 使用自定义指令
9.4.1 认识自定义指令
9.4.2 自定义指令的参数
9.5 组件的Teleport功能
第 10 章 Vue响应性编程
10.1 响应性编程原理与在Vue中的应用
10.1.1 手动追踪变量的变化
10.1.2 Vue中的响应性对象
10.1.3 独立的响应性值Ref的应用
10.2 响应式的计算与监听
10.2.1 关于计算变量
10.2.2 监听响应式变量
10.3 组合式API的应用
10.3.1 关于setup方法
10.3.2 在setup方法中定义生命周期行为
10.4 实战:支持搜索和筛选的用户列表示例
10.4.1 常规风格的示例工程开发
10.4.2 使用组合式API重构用户列表页面
当前位置:
首页>>
技术小册>>
TypeScript和Vue从入门到精通(三)
小册名称:TypeScript和Vue从入门到精通(三)
### 9.1 组件的生命周期与高级配置 在Vue.js框架中,组件是构建复杂应用的基石。理解Vue组件的生命周期及其高级配置选项,对于开发高效、可维护的Vue应用至关重要。本章节将深入探讨Vue组件的生命周期钩子函数以及如何通过高级配置选项来优化组件的性能和行为。 #### 9.1.1 组件生命周期概述 Vue组件从创建到销毁的过程,被称为组件的生命周期。Vue提供了一系列的生命周期钩子函数,允许开发者在组件的不同阶段插入自定义逻辑。这些钩子函数为组件的初始化、模板编译、挂载、更新、渲染和销毁等关键时刻提供了介入点。 Vue 2.x 和 Vue 3.x 在组件生命周期方面有所区别,但基本概念相通。以下是Vue 3中组件生命周期的主要阶段及其对应的钩子函数: 1. **beforeCreate**:在实例初始化之后,数据观测(data observer) 和 event/watcher 事件配置之前被调用。此时组件的props、data、computed、methods等属性都还未被初始化。 2. **created**:在实例创建完成后被立即调用。在这一步,实例已完成以下的配置:数据观测(data observer),属性和方法的运算,watch/event 事件回调。然而,挂载阶段还没开始,`$el` 属性目前不可见。 3. **beforeMount**:在挂载开始之前被调用:相关的 render 函数首次被调用。该钩子在服务器端渲染期间不被调用。 4. **mounted**:`el` 被新创建的 `vm.$el` 替换,并挂载到实例上去之后调用该钩子。如果根实例挂载了一个文档内元素,当 `mounted` 被调用时 `vm.$el` 也在文档内。 5. **beforeUpdate**:数据更新时调用,发生在虚拟 DOM 打补丁之前。这里适合在更新之前访问现有的 DOM,比如手动移除已添加的事件监听器。 6. **updated**:由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用这个钩子。当这个钩子被调用时,组件 DOM 已经更新,所以现在可以执行依赖于 DOM 的操作。但是要避免更改状态,因为这可能会导致无限更新循环。 7. **beforeUnmount**(Vue 3 新增):在卸载组件实例之前调用。在这个阶段,实例仍然完全可用。 8. **unmounted**:Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。 #### 9.1.2 生命周期钩子函数的应用场景 - **created**:常用于执行异步操作或启动定时器,因为此时组件的数据已经准备好,但尚未挂载到DOM上。 - **mounted**:适合执行依赖DOM的操作,如使用第三方库初始化DOM元素,或者设置监听器等。 - **beforeUpdate** 和 **updated**:用于在数据变化前后执行操作,但要注意避免造成性能问题或无限更新循环。 - **beforeUnmount** 和 **unmounted**:用于清理资源,如移除事件监听器、定时器或销毁子组件等。 #### 9.1.3 高级配置选项 Vue组件除了基本的选项如`data`、`methods`、`computed`等外,还提供了一系列高级配置选项,用于控制组件的行为和性能。 1. **mixins**:混入允许你将组件的可复用功能混入一些组件选项中去。混入对象可以包含任意组件选项。当组件使用混入对象时,所有混入对象的选项将被“混入”该组件本身的选项。 2. **extends**:允许你声明性地扩展另一个组件(可以是一个简单的选项对象或构造函数),而无需使用 `Vue.extend`。这主要是为了便于扩展单文件组件。 3. **provide / inject**:`provide` 和 `inject` 绑定并不是可响应的。这是刻意为之的。然而,如果你传入了一个可观察的对象,那么对象的属性还是可响应的。这可以用于高级插件/组件库。 4. **inheritAttrs**:默认情况下父作用域的不被认作 `props` 的特性绑定 (attribute bindings) 将会“回退”且作为普通的 HTML 特性应用在子组件的根元素上。当设置为 `false` 时,这些默认行为将会被移除,而你需要通过其他方式明确传递一个特性到子组件。 5. **components**:局部注册在组件中的子组件。这些子组件只在该组件的作用域内有效。 6. **directives**:自定义指令的钩子函数。Vue 允许你注册或全局注册自定义指令。 7. **filters**:文本格式化函数,可以用在模板文本插值中。Vue 2.x 支持,但在 Vue 3.x 中被移除,推荐使用计算属性或方法代替。 8. **keep-alive**:Vue 提供了 `keep-alive` 包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。这对于保留组件状态或避免重新渲染非常有用。 #### 9.1.4 性能优化与最佳实践 - **避免在 `created` 或 `mounted` 钩子中执行复杂计算或数据操作,特别是当这些操作可能依赖于异步数据时。** 考虑使用 `watch` 或 `computed` 属性来响应数据变化。 - **合理使用 `beforeUpdate` 和 `updated` 钩子,确保不会因频繁更新而导致性能问题。** - **在组件销毁前清理所有资源,如定时器、事件监听器等,以避免内存泄漏。** - **利用 `mixins`、`extends`、`components` 等高级配置选项来组织代码,提高代码复用性和可维护性。** - **考虑使用 `keep-alive` 来缓存组件状态,特别是当组件需要在不同视图间频繁切换且保持状态时。** ### 结语 通过深入理解Vue组件的生命周期及其高级配置选项,你可以更有效地控制组件的行为和性能。记住,每个生命周期钩子都有其特定的应用场景,合理利用这些钩子函数和配置选项,将大大提升你的Vue应用开发效率和用户体验。同时,不断实践和探索新的最佳实践,也是成为一名优秀Vue开发者的重要途径。
上一篇:
第 9 章 组件进阶
下一篇:
9.1.1 生命周期方法
该分类下的相关小册推荐:
vue项目构建基础入门与实战
VUE组件基础与实战
Vue源码完全解析
vuejs组件实例与底层原理精讲
Vue.js从入门到精通(三)
移动端开发指南
TypeScript和Vue从入门到精通(四)
TypeScript和Vue从入门到精通(一)
TypeScript和Vue从入门到精通(二)
Vue面试指南
Vue.js从入门到精通(四)
Vue.js从入门到精通(二)