Vue2之initRender与callHook组件怎么应用


今天小编给大家分享一下Vue2之initRender与callHook组件怎么应用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。在 initEvents 事件系统初始化完成之后,紧接着的就是组件实例的渲染部分的初始化 initRenderinitRender 函数定义位于 src/core/instance/render.ts 文件内,基本定义如下:这部分其实比较好理解:首先是 清空 组件的 VNode 对象和静态dom节点树;并获取到该实例的 父组件虚拟dom树对象 parentVnode父组件实例指向 renderContext然后是处理 当前组件的 slots 插槽对象 ,以及标准化处理组件的数据域插槽给组件添加两个 组件创建方法,但是这两个方法有细微差别:_c 表示使用内部 render 函数,不需要额外的标准化处理$createElement 则表示使用的是用户自己编写的 render 函数,需要内部重新进行一次标准化处理这两个方法最终其实都是调用的 _createElement 方法,只是标准函数(即 _c)使用 simpleNormalizeChildren() 处理,而用户自定义 render (即 $createElement)使用 normalizeChildren() 处理最后对 attrs∗∗和∗∗attrs** 和 **attrs∗∗和∗∗listeners 进行响应式处理。这一步主要是为了提供给高阶组件使用,当使用 attrs∗∗和∗∗attrs** 和 **attrs∗∗和∗∗listeners 进行绑定数据与事件透传时,可以正确触发高阶组件内部的状态更新。整个过程其实就是解析了组件的 options 配置项与父组件的绑定参数,并对插槽和数据域插槽进行不同处理,最后给组件添加 _createElement 的事件指向绑定,并响应式处理两个组件内部没有直接定义的参数/事件。因为这部分篇幅较少,所免费云主机域名以把 callHook() 方法也一并看了。这个方法从名字上就可以看出,是用来触发生命周期钩子的回调函数。在之前的 mergeOptions 配置合并 中已经知道,Vue 组件在实例化的时候会对 options 中的生命周期钩子函数定义进行标准化处理,最后每个生命周期对应的都是一个 函数数组(如果有定义了钩子函数的话)。该方法的定义如下:这里可以分成一下几步来理解:pushTarget() :在组件的 Dep 依赖中插入一个 undefined 元素并将当前依赖指向设置为 undefined,来禁止生命周期钩子函数执行时的依赖收集遍历 options 中对应的钩子函数数组,调用 invokeWithErrorHandling 来执行(这里其实与 initEvnets 中注册组件事件的方法是一致的)如果 _hasHookEventtrue,即父组件有设置子组件的生命周期监听函数,则用 $emit 抛出对应生命周期事件popTarget() :删除之前插入的 undefined 元素,并恢复 Dep 依赖对象中的依赖收集效果两个 setCurrentInstance:这部分则是为了适配 V3 的写法而新增的部分,主要是保证在生命周期的钩子函数中使用 getCurrentInstance() 方法获取当前组件实例时能正确获取到当前的组件状态,但是在钩子函数执行完之后会恢复到之前的状态以上就是“Vue2之initRender与callHook组件怎么应用”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注百云主机行业资讯频道。

相关推荐: Java如何实现解析zip压缩包并获取文件内容

本篇内容介绍了“Java如何实现解析zip压缩包并获取文件内容”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下免费云主机域名来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!页面上传一个源码压缩包,后端将压缩包解…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 03/30 15:04
下一篇 03/30 15:04

相关推荐