什么是虚拟DOM?

举报
JavaEdge 发表于 2021/06/04 00:42:52 2021/06/04
【摘要】 普通HTML标签写法 <a class="link" href="https://github.com/facebook/react">React<a> 1 在js中手动生成相同dom的写法 var a = document.createElement('a') a.setAttribute('class', 'link') a.setAt...

普通HTML标签写法

<a class="link" href="https://github.com/facebook/react">React<a>

  
 
  • 1

在js中手动生成相同dom的写法

var a = document.createElement('a')
a.setAttribute('class', 'link')
a.setAttribute('href', 'https://github.com/facebook/react')
a.appendChild(document.createTextNode('React'))

  
 
  • 1
  • 2
  • 3
  • 4

这是一种封装,沿用的React.createElement的命名

var a = React.createElement('a', { className: 'link', href: 'https://github.com/facebook/react'
}, 'React')

  
 
  • 1
  • 2
  • 3
  • 4

所有html结构,都可以用js dom来构造,而且能将构造的步骤封装起来,做到「数据-dom结构」的映射。缓存初始数据,新数据进来时,与旧数据对比,找到差异,根据差异本身的性质进行dom操作;无差异,则不作为。
dom本身在js中就是一种数据结构,console.dir(document.body),在控制台可以看到body的数据结构。然而,dom相关的数据丰富而且复杂,我们其实只关心少数元素的少数属性。建立一个javascript plain object,非常轻量,用它保存我们真正关心的与dom相关的少数数据;对它进行操作,然后对比操作前后的差异,再根据映射关系去操作真正的dom,无疑能提高性能。这就是虚拟DOM。

参考

  • https://www.zhihu.com/question/29504639/answer/44662943

文章来源: javaedge.blog.csdn.net,作者:JavaEdge.,版权归原作者所有,如需转载,请联系作者。

原文链接:javaedge.blog.csdn.net/article/details/114323978

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。