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

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

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

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

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

  • beforeCreate → created
  • beforeMount → mounted
  • beforeUpdate → updated
  • beforeDestroy → destroyed

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

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 函数中
  • 更新方式:通过Watcher的updateComponent 函数
  • 特点:无-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/

你可能感兴趣的文章
PythonABC多重继承
查看>>
Pythonargparse中的多个参数
查看>>
Python关于 *args 和 **kwargs 参数的详解(全)
查看>>
Pythonfrozenset散列算法/实现
查看>>
PythonGTK+3:通过单击列对树视图进行排序
查看>>
pythonnumpy生成二进制流_python/numpy生成的二进制文件,由C读取
查看>>
pythonsign函数_对python函数签名的方法详解 用python怎么写一个自签名证书
查看>>
PythonStudy
查看>>
Pythons__IMPORT__未按预期工作
查看>>
Pythont通过request以及BeautifulSoup爬取几千条情话
查看>>
pythonweb django的学习
查看>>
pythonweb网站开发基础django安装
查看>>
pythonweb网站开发基础创建django项目
查看>>
pythonweb网站开发基础添加应用
查看>>
Python_015 多线程
查看>>
python_73_pickle序列化(接72)
查看>>
python_code_418
查看>>
python_day10 协程 GEVENT
查看>>
python_day1作业
查看>>
Python接口自动化测试必备基础之http协议详解!
查看>>