博客
关于我
分析vue源码之生命周期
阅读量:529 次
发布时间:2019-03-08

本文共 1562 字,大约阅读时间需要 5 分钟。

生命句(Vue.js)的开发3750+字在前创业者在多次总结与分析中终于有机会系统性地整理出完整的开发笔记。本文将涵盖各生命周期钩子的实现细节、用途以及可能的常见问题。

1. 生命句的四个主要阶段

在通过配置路由或直接使用全局方法将组件渲染到 Vue.jsapplications中前, 它会经历四个重要的生命周期阶段:

  • beforeCreatecreated
  • beforeMountmounted
  • beforeUpdateupdated
  • beforeDestroydestroyed

下面将详细介绍每个阶段的实现细节和应用场景。

1.1. beforeCreate

每当创建一个新的 Vue 实例时, 看到了iye这个阶段就会被自动触发.

1.2. created

这个阶段经常被用来初始化数据和状态:

initState(vm) // 初始化 props, data, methods, computed 等属性

1.3. beforeMount

对于每个 Vue实例来说, 这是进入渲染阶段的前奏:

beforeMount阶段将处理的是观察者(Observer)的初始绑定

1.4. mounted

这是渲染过程的核心阶段:

inMount阶段, Virtual DOM会被初次渲染,同时也会设置初始的观察者实例

1.5. beforeUpdate

这个阶段总是在数据发生变化之前被触发:

beforeUpdate会在所有的 DOM 更新操作之前被调用

1.6. updated

默认的更新阶段会调用该钩子:

当数据发生变化后, updated钩子会被自动触发

1.7. beforeDestroy

在组件被销毁之前, 应该执行的操作:

此时的listener会被自动移除

1.8. destroyed

表明组件已经被完全销毁了:

此时与子组件的销毁过程同步

2. 观察者(WatcherMixin)的实现细节

Vue.js的核心特性之一就是实现高效的 DOM 辅助更新,这得益于观察者机制.

在 beforeMount阶段就会创建观察者实例
  • 初始化时机:在 mountComponent 函数中
  • 更新方式:通过WatcherupdateComponent 函数
  • 特点:无-ranking的观察者实例会被绑定到 DOM 树中

3. 钩子函数的执行顺序

钩子的执行顺序非常重要:

  • 子组件总是先于父组件执行
  • 同时父组件中的钩子依次执行

例如:

从 完成自我配置红色开始每个组件的生命周期- beforeCreate、 created接着是在 mounted前完成子组件的初始化细节可能背景会让人容易混淆

4. 具体实现 - callHook 函数

大部分的钩子函数都通过callHook函数被触发:

// 例子callHook(vm, 'created', [...])

这个函数会根据钩子的名字决定如何执行和传递参数.

5. 常见问题与解决方案

尽管钩子系统非常强大, 但它仍然会有部分常见问题.

  • keep-alive 组件中可能会遇到激活钩子的问题
  • 在 state 的更新中可能会错用 beforeUpdate 钩子
  • 在组件树的销毁过程中可能会忘记处理子组件

6. 综合优化建议

在开发过程中可以通过以下方式使项目和提升用户体验:

  • 尽量减少不必要的 DOM 操作
  • 合理规划状态变量, 避免过度绑定
  • 总是在 beforeMount 和 mounted 阶段加 logger 封装
  • 定期清除未用的观察者实例
  • 回调错误时不忘记处理mutations

通过系统性地总结和分析 Vue.js 组件总和生命周期钩子详解的过程, 应该能够帮助开发者更好地理解组件内的执行逻辑, 并在实际开发中灵活运用。

转载地址:http://bouiz.baihongyu.com/

你可能感兴趣的文章
php数组的几个函数和超全局变量
查看>>
PHP文件上传详解
查看>>
PHP文件锁
查看>>
php文本框输入制定文本,php – 当用户没有向文本框输入任何内容时...
查看>>
PHP时间戳和日期相互转换操作总结
查看>>
php时间戳知识点,php 时间戳函数总结与示例
查看>>
php更新数据库失败,php – 无法更新MySQL数据库
查看>>
php机器人聊天对话框,基于AIML的PHP聊天机器人
查看>>
PHP查找数组中最大值与最小值
查看>>
php查最大值,在PHP数组中查找最大值
查看>>
php标签筛选,关于PHP CodeIgniter框架中通过<a>标签和url做多条件分类筛选
查看>>
php根据年月日计算年龄
查看>>
RabbitMQ - 单机部署(超详细)
查看>>
php检查注册,PHP检查注册的电子邮件地址是一个’school.edu’地址
查看>>
php模拟发送GET和POST请求
查看>>
RabbitMQ - 以 MQ 为例,手写一个 RPC 框架 demo
查看>>
php模板引擎smarty
查看>>
php正则表达式模式
查看>>
php正则表达式的特殊字符含义
查看>>
PHP正则表达式获取武汉市的实时pm2.5数据并邮件发送phpmailer
查看>>