vue 如何生成一个dom元素_vue 学习心得——DOM树如何被构建

本文探讨Vue如何通过$mount函数构建DOM树,详细解析了渲染和更新过程。从执行render函数生成虚拟节点(VNode),到update函数中的patch过程,特别是createElm函数在创建DOM元素中的作用。文章强调了子元素的mounted生命周期函数先于父元素执行,揭示了Vue数据驱动的原理。了解这一过程有助于理解Vue的数据绑定和DOM操作。
摘要由CSDN通过智能技术生成

代码编辑不够友好,为更好一点的阅读体验,还是推荐原文链接:https://www.yuque.com/longtengsong/blog/bu09tk

DOM 树是 vue 在构建实例的时候,通过 $mount 函数创建出来的。那么 DOM 创建过程是怎样的呢?

步骤一:执行 render 函数

$mount 函数执行时,实际调用的是: vm._update(vm._render(), hydrating) 。

从上图中可以看到,模版被编译为一个render函数,render 函数执行最终目的就是将 template 转换为 vnode 。

步骤二:执行 update 函数

从 _update 源码可以看出,如果初次渲染,即 initial render,则走 vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false /* removeOnly */) 这个分枝,而 vm.$el = vm.__patch__(prevVnode, vnode) 则是组件更新时执行的分枝。这里我们先专注于初次渲染的分枝。

通过 Vue.prototype.__patch__ 函数定义,层层查找,最终 patch 进入我们视野,通过分析 createElm 便是DOM 创建的关键函数。

注意,我们目前仅仅探究 vue 构建 DOM 的流程,因此仅作最简单的考虑,上述代码过滤了组件渲染,跨平台、警告信息等非关键代码。

很明显, nodeOps.createElement(tag, vnod

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用IE10浏览器时,使用Vue动态生成DOM元素设置style时遇到问题。这个问题是由于IE10对CSS样式属性的支持不完善所致。 在IE10中,某些CSS属性可能无法通过Vue动态添加的方式进行设置。这可能是因为IE10不支持某些CSS属性值或者属性的写法。 为了解决这个问题,我们可以考虑以下几个解决方案: 1. 使用内联样式(inline style):将需要设置的样式直接写在DOM元素的style属性中,而不是通过Vue的动态绑定方式设置。例如:`<div style="color: red;"></div>` 2. 使用类样式(class style):将需要设置的样式写在CSS文件中,然后通过Vue动态绑定class名称的方式来设置样式。例如:`<div :class="{ 'red-text': isSelected }"></div>`,其中red-text是一个CSS类名,根据isSelected的值来决定是否添加该类。 3. 使用Vue的计算属性(computed property):可以通过计算属性的方式来动态计算需要设置的样式值,然后通过绑定计算属性的方式来设置样式。例如:`<div :style="{ color: textColor }"></div>`,其中textColor是一个计算属性,根据需求返回不同的颜色值。 需要注意的是,以上解决方案仅适用于IE10,在其他浏览器中可能没有问题。此外,如果需要兼容更早的IE版本,可能还需要使用其他的兼容性解决方案,例如使用polyfill库或者进行样式表达式的处理。 最后,建议尽量避免使用过于复杂的样式操作,以提高代码的可维护性和兼容性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值