生命周期的实现原理
生命周期会进行两次初始化合并
-
第一次是全局的混入vm.mixin
-
第二次是组件初始化后,用户传进来的options会和vue全局的api钩子合并
-
核心就是 callHook函数
-
callHook函数依次执行对应的生命周期函数
export function callHook(vm, hook) {
let handlers = vm.$options[hook];
handlers.forEach((handler) => {
handler.call(vm);
});
}
Vue.prototype._init = function (options) {
const vm = this;
vm.$options = mergeOptions(this.constructor.options, options);
callHook(vm, "beforeCreate");
initState(vm);
callHook(vm, "created");
console.log(vm.$options);
if (vm.$options.el) {
vm.$mount(vm.$options.el);
}
};
export function mountComponent(vm, el) {
function updateComponent() {
vm._update(vm._render());
}
callHook(vm, "beforeMount");
new Watcher(vm, updateComponent, () => {}, true);
}