1.6 生命周期钩子选项自定义策略
我们知道掌握vue的生命周期钩子是使用vue高效开发组件的重点,这是vue官方的生命周期图
从源码中我们也可以看到vue中有多达12个钩子,而在选项合并的时候,生命周期钩子选项是遵循的以下的规则合并的。
var LIFECYCLE_HOOKS = [
'beforeCreate',
'created',
'beforeMount',
'mounted',
'beforeUpdate',
'updated',
'beforeDestroy',
'destroyed',
'activated',
'deactivated',
'errorCaptured',
'serverPrefetch'
];
LIFECYCLE_HOOKS.forEach(function (hook) {
strats[hook] = mergeHook; // 对生命周期钩子选项的合并都执行mergeHook策略
});
function mergeHook (parentVal,childVal) {
var res = childVal
? parentVal
? parentVal.concat(childVal)
: Array.isArray(childVal)
? childVal
: [childVal]
: parentVal; // 1.如果子类和父类都拥有钩子选项,则将子类选项和父类选项合并, 2如果父类不存在钩子选项,子类存在时,则以数组形式返回子类钩子选项, 3.当子类不存在钩子选项时,则以父类选项返回。
return res
? dedupeHooks(res)
: res
}
// 防止多个组件实例钩子选项相互影响
function dedupeHooks (hooks) {
var res = [];
for (var i = 0; i < hooks.length; i++) {
if (res.indexOf(hooks[i]) === -1) {
res.push(hooks[i]);
}
}
return res
}
简单总结,对于生命周期钩子选项,子类和父类的选项将合并成数组,这样每次执行子类的钩子函数时,父类钩子选项也会执行。