合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
## 初始化阶段 问题: 1. 生命周期初始化event时,为什么只初始化组件上的event 2. Injections的例子,会不会有孙子组件拿到数据,但是数据不更新的情况 ## _init 初始化函数 1. options - mergeOptions 的操作 2. initLifecycle - 初始化一些内部属性和外部属性,并提供默认值 3. initEvents - 初始化父组件注册在子组件上的事件 ![](https://img.kancloud.cn/1e/91/1e912cc47607675b20fe96afb54f8044_1850x820.png) 4. 初始化 inject 5. 初始化props 6. 初始化methods 7. 初始化data 8. 初始化computed· 9. 初始化watch 10. 初始化provide ![](https://img.kancloud.cn/04/2b/042b0ee6a4d22a2120431adbe582f349_1022x1170.png) ## 初始化状态 ### 初始化 props ![](https://img.kancloud.cn/69/3f/693fe18a7e17a7970ab575689519e46d_2022x1374.png) 问题1:判断当前实例是否是根组件,是根组件,就把props数据转换成响应式(为什么只有根组件才需要转换成响应式?) 问题2: 为什么要规格化props,规格化props 的作用是什么 ### 初始化 methods 遍历methods,将里头的方法放在vm上 ``` vm[key] = methods[key] == null ? noop : bind(methods[key], vm) ``` ### 初始化 data 1. 将 data 数据保存在vm._data中 2. 转换成响应式数据 ### 初始化 computed & computed 原理 ![](https://img.kancloud.cn/4e/8a/4e8a5e2844b2931ef29f3a3b4937a2d3_2323x1590.png) 1. 读取computed的值时,会计算一次值,添加一个 watcher, 会把watcher的 dirty 设置成 false 2. 依赖发生改变时,把 dirty 设置成 true 3. 再次读取 computed,通过dirty判断返回值是否发生变化,如果发生变化,会重新计算一下computed的值,并把dirty设置成false。如果结果和上次不一样,计算属性的watcher会通知组件的watcher,进行重新渲染 ![](https://img.kancloud.cn/17/bd/17bdc8bdd192d4c956263d0871323466_1667x407.png) 问题: computed 和 watch 有什么不同 ### 初始化 watch 循环watch选项,依次调用 vm.$watch (*详细可查阅 - 变化侦测 - object变化侦测章节*) ### 初始化 provide