vue diff算法与虚拟dom知识整理(4) h函数虚拟节点嵌套

这篇具有很好参考价值的文章主要介绍了vue diff算法与虚拟dom知识整理(4) h函数虚拟节点嵌套。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

那么 先补充上文有一个没强调的点
h函数 当你不需要属性时 其实是可以不传的
例如 我们打开案例 打开 src下的index.js
修改代码如下

import {
    init,
    classModule,
    propsModule,
    styleModule,
    eventListenersModule,
    h,
  } from "snabbdom";

  //创建patch函数
  const patch = init([
    classModule,
    propsModule,
    styleModule,
    eventListenersModule
  ]);
 
  //创建虚拟节点
  var vonm = h("duv","你好");

  //让虚拟节点上树
  const container = document.getElementById('container');
  patch(container,vonm);

声明标签为div 不需要任何标签属性 因此 我们就直接 告诉他div 然后后面一个参数直接跟里面的文本 程序也能识别 我们运行项目
vue diff算法与虚拟dom知识整理(4) h函数虚拟节点嵌套
可以看到 一切正常 所以 这个h函数还是很好用的

然后 我们虚拟dom节点是可以嵌套虚拟dom节点的
简单说 就是 将一个虚拟dom节点作为另一个虚拟dom的子节点
h函数是可以嵌套的

这里 就可以简单理解为 h函数 声明了一个虚拟的 ul dom节点 他的第二个参数没有传属性 第三个参数 直接给了个数组 每个数组都是一个h函数声明出来的虚拟dom节点 因此
就会成为他的子节点
vue diff算法与虚拟dom知识整理(4) h函数虚拟节点嵌套
这里 我们将 src下的index.js代码更改如下

import {
    init,
    classModule,
    propsModule,
    styleModule,
    eventListenersModule,
    h,
  } from "snabbdom";

  //创建patch函数
  const patch = init([
    classModule,
    propsModule,
    styleModule,
    eventListenersModule
  ]);
  
  const xvul = h("ul",[
    h("li","java"),
    h("li","html"),
    h("li","C#")
  ]);

  //让虚拟节点上树
  const container = document.getElementById('container');
  patch(container,xvul);

因为我们 ul 不需要标签属性啊 所以 h函数的第二个参数就不穿了 直接 标签类型 后面跟子节点的数组
然后 每个子节点都是 h函数声明出来的 li虚拟节点 同样 他们也不需要标签属性 就没有加第二个属性参数 直接在后面跟文本内容了
然后 我们运行项目
vue diff算法与虚拟dom知识整理(4) h函数虚拟节点嵌套
可以看到 我们完整的一个无序列表就出来了

再有层次 就一直往下套数组就好了
例如

import {
    init,
    classModule,
    propsModule,
    styleModule,
    eventListenersModule,
    h,
  } from "snabbdom";

  //创建patch函数
  const patch = init([
    classModule,
    propsModule,
    styleModule,
    eventListenersModule
  ]);
  
  const xvul = h("ul",[
    h("li","java"),
    h("li","html"),
    h("li",[
      h("div","嘻嘻哈哈")
    ])
  ]);

  //让虚拟节点上树
  const container = document.getElementById('container');
  patch(container,xvul);

这样 我们第三个 li 就里面又套了一个div
我们看界面效果
vue diff算法与虚拟dom知识整理(4) h函数虚拟节点嵌套
没有任何问题

可能有人会想 我就一个节点 也要搞个数组吗?
这个 开发者也想到了
我们可以改成这样

import {
    init,
    classModule,
    propsModule,
    styleModule,
    eventListenersModule,
    h,
  } from "snabbdom";

  //创建patch函数
  const patch = init([
    classModule,
    propsModule,
    styleModule,
    eventListenersModule
  ]);
  
  const xvul = h("ul",[
    h("li","java"),
    h("li","html"),
    h("li",h("div","嘻嘻哈哈"))
  ]);

  //让虚拟节点上树
  const container = document.getElementById('container');
  patch(container,xvul);

效果是一样的
vue diff算法与虚拟dom知识整理(4) h函数虚拟节点嵌套
多个时 用数组
单个时 你可以用数组 但也可以直接写个h函数声明的虚拟节点上去 肯定是后者看着更友好一点

好 h函数就很灵活 这个大家也都感受到了

这样 我下一文就会来讲一下这个h函数文章来源地址https://www.toymoban.com/news/detail-433825.html

到了这里,关于vue diff算法与虚拟dom知识整理(4) h函数虚拟节点嵌套的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • React源码解析18(10)------ 实现多节点的Diff算法

    在上一篇中,实现了多节点的渲染。但是之前写得diff算法,只能适用于单节点的情况,例如这种情况: 如果对于多节点的情况: 之前实现的diff算法就不会有效果了,所以在这一篇中,我们主要实现针对于多节点的diff算法。 实现之前,我们先将index.js修改一下: 在reconcile

    2024年02月12日
    浏览(37)
  • vue中删除dom元素节点

    document.querySelectorAll(…).remove is not a function\\\" 因为 document.querySelectorAll(‘.esedbox .triangle_b’)返回的不是数组,而是类数组 ,不能用remove方法(remove方法是dom元素节点的方法) Array.from()方法主要用于将两类对象(类似数组的对象[array-like object]和可遍历对象[iterable])转为真正的数

    2024年02月11日
    浏览(32)
  • 【ES6】Proxy的高级用法,实现一个生成各种 DOM 节点的通用函数dom

    下面的例子则是利用get拦截,实现一个生成各种 DOM 节点的通用函数dom。 输出结果:

    2024年02月10日
    浏览(44)
  • vue3 - vue3中使用ref来获取dom节点

    vue3和vue2获取元素的不同:vue2是通过 this.$refs api获取dom节点的 ; vue3是 直接使用同名的 ref 响应式数据来获取的; 1,常规使用 注意: 节点上的 ref=“input” 需要和 const input = ref(null)相对应 才能获取到此dom节点 2,v-for中的ref获取 有时我们需要 获取循环中的dom节点 并根据状态

    2024年02月16日
    浏览(51)
  • Vue 虚拟DOM

    在当今Web开发领域中,构建交互性强、可复用且易于维护的用户界面是至关重要的。而Vue.js作为一款现代化且流行的JavaScript框架,正是为了满足这些需求而诞生。它采用了MVVM架构模式,并通过数据驱动和组件化的方式,使我们能够更轻松地构建出优雅而高效的Web应用程序。

    2024年02月22日
    浏览(39)
  • vue的虚拟DOM

    虚拟DOM就是一个JS对象,用它来描述真实DOM demo1: 多次执行dom操作 demo2: 只执行一次dom操作 比较运行时间:得到结论 越多的真实dom操作,越损耗性能 操作数据要大大的减少性能损耗,提高渲染效率 第一种更新DOM的方案 第二种更新DOM的方案 第三种使用虚拟DOM的方案 key是虚拟

    2024年02月09日
    浏览(40)
  • Vue面试之虚拟DOM

        最近在整理一些前端面试中经常被问到的问题,分为vue相关、react相关、js相关、react相关等等专题,可持续关注后续内容,会不断进行整理~     虚拟 DOM 是用 JavaScript 对象来模拟实际 DOM 结构的一种抽象表示。它描述了组件的结构、属性和事件等信息,但与实际的页面

    2024年01月21日
    浏览(39)
  • vue中的虚拟dom

    DOM操作是Web开发中非常昂贵和低效的操作,尤其是在用户界面频繁更新的情况下。此时,在每次数据更新时重新渲染整个DOM树会导致应用程序性能下降。 为了解决这个问题,虚拟DOM被引入到前端开发中。虚拟DOM把整个DOM树抽象成一个JS对象,这样开发者就可以直接操作JS对象

    2024年02月09日
    浏览(41)
  • 【vue】diff 算法详解

    diff算法是一种通过 同层的树节点 进行比较的高效算法         diff算法的目的就是找出新旧不同虚拟DOM之间的差异,使最小化的更新视图,所以 diff 算法本质上就是比较两个js对象的差异 特点         1. 比较只会在同层级进行,不会跨层级比较         2. 在diff比较的构成

    2024年02月02日
    浏览(34)
  • vue 虚拟DOM的优劣说明

    Vue.js 使用虚拟 DOM(Virtual DOM)来提高应用的性能。虚拟 DOM 是一种编程概念,它通过在内存中创建一个与真实 DOM 结构相同的虚拟结构,来优化对真实 DOM 的操作。下面是对 Vue.js 中虚拟 DOM 的优劣说明和代码示例。 优势: 性能优化 :Vue.js 通过虚拟 DOM 减少了直接操作真实

    2024年01月25日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包