Vue的模板编译实际就是将模板字符串通过解析、优化和代码生成等步骤转换为渲染函数的过程。这个过程中,AST扮演了非常重要的角色,它用树形结构描述了模板的内容和结构,是编译过程的核心数据结构;同事,优化步骤可以提高后续渲染的性能,减少不必要的计算和比较;最后生成渲染函数实可以根据Vue实例的数据生成虚拟DOM,并最终渲染。
Vue.directive('focus', {
// 当被绑定的元素挂载到 DOM 中时……
inserted: function (el) {
// 聚焦元素
el.focus()
}
})
directives: {
focus: {
// 当被绑定的元素挂载到 DOM 中时……
inserted: function (el) {
// 聚焦元素
el.focus()
}
}
}
自定义指令钩子
bind:只调用一次,指令第一次绑定到元素时调用;inserted:被绑元素插入父节点时调用;update:所在组件的VNode更新时调用componentUpdated:指令所在组件的VNode及其子VNode全部更新后调用;unbind:只调用一次;注意事项:
updated 钩子,可能会在一个元素的生命周期内多次调用;unbindvue的diff算法,也被称为“虚拟DOM差异算法”,是Vue实现高效DOM更新机制的核心部分。这个算法用于比较新旧两个虚拟DOM树,将差异应用到实际的DOM上,从而避免不必要的DOM操作,提高性能。
key比较:key不同,则直接会创建一个新的DOM节点;Object.defineProperty(),vue3使用的是proxy;createAPP()emits