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

本文共 1566 字,大约阅读时间需要 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/

你可能感兴趣的文章
Objective-C实现LRU 缓存算法(附完整源码)
查看>>
Objective-C实现LRU缓存(附完整源码)
查看>>
Objective-C实现lstm prediction预测算法(附完整源码)
查看>>
Objective-C实现lucas数列算法(附完整源码)
查看>>
Objective-C实现Luhn (Mod 10)Algorithm算法(附完整源码)
查看>>
Objective-C实现LZW编码(附完整源码)
查看>>
Objective-C实现MAC桌面暗水印(附完整源码)
查看>>
Objective-C实现mandelbrot曼德勃罗特集算法(附完整源码)
查看>>
Objective-C实现markov chain马尔可夫链算法(附完整源码)
查看>>
Objective-C实现MATLAB中Filter函数功能(附完整源码)
查看>>
Objective-C实现matrix chainorder矩阵链顺序算法(附完整源码)
查看>>
Objective-C实现matrix exponentiation矩阵求幂算法(附完整源码)
查看>>
Objective-C实现MatrixMultiplication矩阵乘法算法 (附完整源码)
查看>>
Objective-C实现max non adjacent sum最大非相邻和算法(附完整源码)
查看>>
Objective-C实现max subarray sum最大子数组和算法(附完整源码)
查看>>
Objective-C实现max sum sliding window最大和滑动窗口算法(附完整源码)
查看>>
Objective-C实现MaxHeap最大堆算法(附完整源码)
查看>>
Objective-C实现MaximumSubarray最大子阵列(Brute Force蛮力解决方案)算法(附完整源码)
查看>>
Objective-C实现MaximumSubarray最大子阵列(动态规划解决方案)算法(附完整源码)
查看>>
Objective-C实现maxpooling计算(附完整源码)
查看>>