渲染过程:
⽗组件挂载完成⼀定是等⼦组件都挂载完成后,才算是⽗组件挂载完,所以⽗组件的mounted在⼦组
件mouted之后
⽗beforeCreate -> ⽗created -> ⽗beforeMount -> ⼦beforeCreate -> ⼦created -> ⼦beforeMount
-> ⼦mounted -> ⽗mounted
⼦组件更新过程:
1. 影响到⽗组件: ⽗beforeUpdate -> ⼦beforeUpdate->⼦updated -> ⽗updted
2. 不影响⽗组件: ⼦beforeUpdate -> ⼦updated
⽗组件更新过程:
1. 影响到⼦组件: ⽗beforeUpdate -> ⼦beforeUpdate->⼦updated -> ⽗updted
2. 不影响⼦组件: ⽗beforeUpdate -> ⽗updated
销毁过程:
⽗beforeDestroy -> ⼦beforeDestroy -> ⼦destroyed -> ⽗destroyed
看起来很多好像很难记忆,其实只要理解了,不管是哪种情况,都⼀定是⽗组件等待⼦组件完成后,才
会执⾏⾃⼰对应完成的钩⼦,就可以很容易记住
v-show 和 v-if 有哪些区别?
v-if 会在切换过程中对条件块的事件监听器和⼦组件进⾏销毁和重建,如果初始条件是false,则什么
都不做,直到条件第⼀次为true时才开始渲染模块。
v-show 只是基于css进⾏切换,不管初始条件是什么,都会渲染。
所以, v-if 切换的开销更⼤,⽽ v-show 初始化渲染开销更⼤,在需要频繁切换,或者切换的部分
dom很复杂时,使⽤ v-show 更合适。渲染后很少切换的则使⽤ v-if 更合适。
computed 和 watch 有什么区别?
computed 计算属性,是依赖其他属性的计算值,并且有缓存,只有当依赖的值变化时才会更新。
watch 是在监听的属性发⽣变化时,在回调中执⾏⼀些逻辑。
所以, computed 适合在模板渲染中,某个值是依赖了其他的响应式对象甚⾄是计算属性计算⽽来,
⽽ watch 适合监听某个值的变化去完成⼀段复杂的业务逻辑。
Vue 中的 computed 是如何实现的
流程总结如下:
1. 当组件初始化的时候, computed 和 data 会分别建⽴各⾃的响应系统, Observer 遍历 data
中每个属性设置 get/set 数据拦截
2. 初始化 computed 会调⽤ initComputed 函数
1. 注册⼀个 watcher 实例,并在内实例化⼀个 Dep 消息订阅器⽤作后续收集依赖(⽐如渲染