博客
关于我
分析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/

你可能感兴趣的文章
PostgreSQL 如何从崩溃状态恢复(上)
查看>>
PostgreSQL 存储过程基本语法
查看>>
PostgreSQL 实现批量更新、删除、插入
查看>>
PostgreSQL 导入 .gz 备份文件
查看>>
PostgreSQL 批量插入&更新数据时报错(ERROR: ON CONFLICT DO UPDATE command cannot affect row a second time)
查看>>
PostgreSQL 新增数据返回自增ID
查看>>
postgresql 更新多列数据
查看>>
PostgreSQL 服务启动后停止
查看>>
PostgreSQL 辟谣存在任意代码执行漏洞:消息不实
查看>>
PostgreSQL+PostGIS实现两坐标点之间最短路径查询算法函数(地图工具篇.12)
查看>>
Qt开发——简易调色板QPalette
查看>>
PostgreSQL-解决连接时遇到的乱码问题
查看>>
PostgreSQL15.2最新版本安装_远程连接_Navicat操作_pgAdmin操作_Windows10上安装---PostgreSQL工作笔记001
查看>>
PostgreSQL9.1 双机部署配置(主备数据同步)
查看>>
Qt开发——简易网络浏览器(一)
查看>>
Qt开发——简易成绩登记系统
查看>>
Postgresql中PL/pgSQL代码块的语法与使用-声明与赋值、IF语句、CASE语句、循环语句
查看>>
Postgresql中PL/pgSQL的游标、自定义函数、存储过程的使用
查看>>
Postgresql中的表结构和数据同步/数据传输到Mysql
查看>>
Postgresql中自增主键序列的使用以及数据传输时提示:错误:关系“xxx_xx_xx_seq“不存在
查看>>