首页
技术小册
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.1 生命周期方法 在Vue.js框架中,组件是构建用户界面的基石,而生命周期方法(或称为生命周期钩子)则是Vue组件从创建到销毁的整个过程中,自动调用的特定函数。这些方法为开发者提供了在不同阶段介入组件行为的机会,使得我们能够执行诸如数据初始化、DOM操作、事件监听、资源清理等任务。当我们将Vue与TypeScript结合使用时,生命周期方法的使用变得更加灵活且类型安全,有助于我们编写出更加健壮和易于维护的Vue应用。本章节将深入解析Vue组件的生命周期方法,并探讨在TypeScript环境下如何高效利用它们。 #### 9.1.1.1 生命周期方法概览 Vue组件的生命周期可以大致划分为几个阶段:创建、挂载、更新、卸载。每个阶段都伴随着特定的生命周期方法被调用。以下是Vue 2.x和Vue 3.x中常见的生命周期方法概览(注意:Vue 3对生命周期方法进行了部分重命名和引入了一些新的方法): **Vue 2.x 生命周期方法**: - `beforeCreate`:在实例初始化之后,数据观测(data observer) 和 event/watcher 事件配置之前被调用。 - `created`:实例已经创建完成之后被立即调用。在这一步,实例已完成以下的配置:数据观测(data observer),属性和方法的运算,watch/event 事件回调。然而,挂载阶段还没开始,$el 属性目前不可见。 - `beforeMount`:在挂载开始之前被调用:相关的 render 函数首次被调用。该钩子在服务器端渲染期间不被调用。 - `mounted`:el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用该钩子。如果根实例挂载了一个文档内元素,当 mounted 被调用时 vm.$el 也在文档内。 - `beforeUpdate`:数据更新时调用,发生在虚拟 DOM 打补丁之前。这里适合在更新之前访问现有的 DOM,比如手动移除已添加的事件监听器。 - `updated`:由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用这个钩子。当这个钩子被调用时,组件 DOM 已经更新,所以你现在可以执行依赖于 DOM 的操作。但是要避免更改状态,因为这可能会导致无限循环的更新。 - `beforeDestroy`:实例销毁之前调用。在这一步,实例仍然完全可用。 - `destroyed`:Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。 **Vue 3.x 新增/变更的生命周期方法**: - `beforeUnmount`:对应Vue 2.x的`beforeDestroy`,用于Vue 3的组合式API。 - `unmounted`:对应Vue 2.x的`destroyed`,同样用于Vue 3的组合式API。 此外,Vue 3还引入了`setup()`函数作为组件内使用组合式API的入口点,它会在`beforeCreate`和`created`之间被调用,此时组件的props和context已经可用,但还没有挂载DOM,因此不能访问`this`。 #### 9.1.1.2 TypeScript与生命周期方法 在TypeScript中使用Vue的生命周期方法时,可以充分利用TypeScript的类型系统来增强代码的可读性和健壮性。虽然Vue的生命周期方法本身并不直接提供类型检查(除非使用Vue Class Component或类似的库),但你可以通过接口或类型定义来约束这些方法中的代码逻辑。 **示例:使用TypeScript定义生命周期方法** ```typescript <script lang="ts"> import { defineComponent } from 'vue'; export default defineComponent({ name: 'MyComponent', setup() { // 组合式API示例,不直接展示生命周期方法 // 但可以在此基础上结合onMounted等函数 }, mounted() { // 使用mounted生命周期方法 console.log('Component is mounted!'); // TypeScript类型安全:可以在此处安全地操作DOM const el = this.$el as HTMLElement; el.style.color = 'red'; }, beforeDestroy() { // 清理操作,如移除事件监听器 window.removeEventListener('resize', this.handleResize); }, methods: { handleResize() { // 处理窗口大小改变 } } }); </script> ``` 在上面的例子中,`mounted`和`beforeDestroy`是Vue的生命周期方法,它们在组件的不同阶段被调用。通过TypeScript,我们可以明确知道`this`的类型(在`mounted`中默认为Vue组件实例),并且可以在不牺牲类型安全性的情况下,执行DOM操作或事件监听器的添加与移除。 #### 9.1.1.3 生命周期方法的最佳实践 1. **避免在`created`和`mounted`中设置过多的逻辑**:尽管这两个方法常用于初始化数据和DOM操作,但过度使用会导致组件逻辑复杂且难以维护。考虑将业务逻辑拆分到更小的函数或计算属性中。 2. **合理利用`beforeUpdate`和`updated`**:这两个方法常用于调试或需要响应数据变化而进行的DOM操作。但务必注意,频繁的DOM操作可能导致性能问题。 3. **清理资源**:在`beforeDestroy`或`beforeUnmount`中清理定时器、事件监听器等资源,防止内存泄漏。 4. **使用组合式API(Vue 3)**:对于Vue 3项目,推荐使用组合式API(如`onMounted`、`onBeforeUnmount`等)来替代传统的选项式API中的生命周期方法。这不仅可以使代码更加模块化和可重用,还能更好地与TypeScript结合,提升开发效率。 5. **类型定义**:虽然Vue的生命周期方法本身不直接提供类型支持,但你可以通过类型定义来增强代码的可读性和健壮性。例如,为`this`在生命周期方法中的类型提供显式注释,或者使用Vue Class Component等库来自动推断类型。 #### 结论 Vue的生命周期方法是Vue组件开发中不可或缺的一部分,它们为开发者提供了在不同阶段介入组件行为的机会。在TypeScript环境下,通过合理利用生命周期方法和TypeScript的类型系统,我们可以编写出更加健壮、易于维护和可扩展的Vue应用。无论你是使用Vue 2.x还是Vue 3.x,理解并熟练掌握生命周期方法都是成为一名高效Vue开发者的关键。
上一篇:
9.1 组件的生命周期与高级配置
下一篇:
9.1.2 应用的全局配置选项
该分类下的相关小册推荐:
Vue.js从入门到精通(三)
vue项目构建基础入门与实战
TypeScript和Vue从入门到精通(一)
Vue3技术解密
Vue面试指南
vuejs组件实例与底层原理精讲
TypeScript和Vue从入门到精通(五)
TypeScript和Vue从入门到精通(四)
Vue.js从入门到精通(一)
Vue源码完全解析
Vue原理与源码解析
Vue.js从入门到精通(四)