vue源码:钩子hook

vue callhook的源码
const hookRE = /^hook:/ // 以hook:开头
Vue.prototype.KaTeX parse error: Expected '}', got 'EOF' at end of input: …++) { vm.on(event[i], fn)
}
} else {
(vm._events[event] || (vm._events[event] = [])).push(fn)
// optimize hook:event cost by using a boolean flag marked at registration
// instead of a hash lookup
if (hookRE.test(event)) {
vm._hasHookEvent = true
}
}
return vm
}

// vue源码执行阶段
vm._self = vm
initLifecycle(vm) // 初始化生命周期
initEvents(vm) // 初始化事件
initRender(vm)
callHook(vm, ‘beforeCreate’)
initInjections(vm) // resolve injections before data/props
initState(vm)
initProvide(vm) // resolve provide after data/props
callHook(vm, ‘created’)

1) 生命周期函数是通过callHook这个函数去调用的
2) 其中vm.$options中包含了vm中所有的钩子函数已经其他一些配置,根据对应的hook字符串取出来然后用call执行 。组件的参数存在于当前实例 $ options的原型上
3) 执行callHook函数的时候,Vue在组件的 $ options中查找created是否存在。如果存在的话就执行created相对应的方法。callHook(vm, ‘created’)

Hook Event
1)Hook Event 是 Vue 的自定义事件结合生命周期钩子实现的一种从组件外部为组件注入额外生命周期方法
2) vm._hasHookEvent 是在 initEvents 函数中定义的(它表示的是父组件有没有直接绑定钩子函数在当前组件上),它的作用是判断是否存在生命周期钩子的事件侦听器,初始化值为 false 代表没有,当组件检测到存在生命周期钩子的事件侦听器时,会将 vm._hasHookEvent 设置为 true
3) 示例: <Table @hook:updated=“handleTableUpdated”>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue生命周期钩子函数是在Vue实例在不同阶段执行的特定函数。它们允许我们在Vue实例的不同生命周期阶段执行自定义的操作。以下是Vue的生命周期钩子函数: 1. beforeCreate:在实例初始化之后,数据观测和事件配置之前被调用。此时,实例的属性和方法还未初始化。 2. created:在实例创建完成后被立即调用。此时,实例已经完成了数据观测,属性和方法的运算,但是还没有挂载到DOM上。 3. beforeMount:在挂载开始之前被调用。此时,模板编译已经完成,但是还没有将编译好的模板挂载到DOM上。 4. mounted:在挂载完成后被调用。此时,实例已经完成了模板的挂载,并且可以访问到挂载后的DOM元素。 5. beforeUpdate:在数据更新之前被调用。此时,数据已经更新,但是DOM还没有重新渲染。 6. updated:在数据更新之后被调用。此时,DOM已经重新渲染完成。 7. beforeDestroy:在实例销毁之前被调用。此时,实例还没有被销毁,但是实例的属性和方法仍然可用。 8. destroyed:在实例销毁之后被调用。此时,实例已经被销毁,所有的事件监听器和观察者都已被移除。 下面是一个示例,演示了Vue生命周期钩子函数的使用: ```javascript new Vue({ el: '#app', data: { message: 'Hello Vue!' }, beforeCreate() { console.log('beforeCreate hook'); }, created() { console.log('created hook'); }, beforeMount() { console.log('beforeMount hook'); }, mounted() { console.log('mounted hook'); }, beforeUpdate() { console.log('beforeUpdate hook'); }, updated() { console.log('updated hook'); }, beforeDestroy() { console.log('beforeDestroy hook'); }, destroyed() { console.log('destroyed hook'); } }); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值