beforeCreate -> setup()
created -> setup()
beforeMount -> onBeforeMount
mounted -> onMounted
beforeUpdate -> onBeforeUpdate
updated -> onUpdated
beforeDestroy -> onBeforeUnmount
destroyed -> onUnmounted
activated -> onActivated
deactivated -> onDeactivated
errorCaptured -> onErrorCaptured
先说说调用流程
触发 set => trigger => effect.scheduler() => queueJob(update) => queue.push(job); => flushJobs(执行队列, 执行完成以后) => flushPostFlushCbs => 触发回调
加入钩子 set => trigger => effect.scheduler() => queueJob(update) => queue.push(job); => flushJobs(执行队列) => patch(不停的递归) => unmount => parentComponent.ctx.deactivate(vnode)
这是另外一套 Vue3 钩子触发方法,也是我后续才注意到的,需要补充在之前的生命周期流程。
1 | sharedContext.deactivate = (vnode: VNode) => { |
这种执行模式,更新, active 等等都是这样的,但是都是完全执行完成之后,在最后调用。
调用路径类似
触发 set => dep => watcher => 调度队列 => watcher.run() => updateComponent => patch => removeVnodes => invokeDestroyHook 触发 hooks。