首页 > 编程语言 >虚拟DOM如何被渲染产生的?(虚拟DOM和diff算法(上))

虚拟DOM如何被渲染产生的?(虚拟DOM和diff算法(上))

时间:2024-08-10 19:26:02浏览次数:15  
标签:container 函数 DOM patch 虚拟 diff 节点

虚拟DOM如何被渲染产生的?
答:h函数

h函数的使用:

1.产生虚拟节点(vnode)
2.h函数可以嵌套,从而得到虚拟DOM树

1.产生虚拟节点

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

// 创建出patch函数(diff算法的核心函数)
const patch =init([classModule,propsModule,styleModule,eventListenersModule,])
//一.h函数创建虚拟节点
const myVnode1=h('a',{
    props:
    {
        href:'https://github.com/snabbdom/snabbdom',
        target:'_blank'//在新的标签页打开网页
    }
},'h函数创建虚拟节点')
// 打印虚拟节点的属性
console.log(myVnode1);


// 二.让虚拟节点上树(显示在页面上)
const container =document.getElementById('container')
patch(container,myVnode1)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="container"></div>
    <script src="/xuni/bundle.js"></script>
</body>
</html>

// 打印虚拟节点的属性console.log(myVnode1);


2.h函数可以嵌套,从而得到虚拟DOM树

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

// 创建出patch函数(diff算法的核心函数)
const patch =init([classModule,propsModule,styleModule,eventListenersModule,])


// h函数可以嵌套,从而得到虚拟DOM树
const myVnode2 =h('ul',[
    h('li',{},'跳舞'),
    h('li','唱歌'),
    h('li',[
        h('div',[
            h('p','你好'),
            h('p','哈哈')
        ])
    ]),
    h('li','打篮球'),


])
// 让虚拟节点上树(显示在页面上)
const container =document.getElementById('container')
patch(container,myVnode2)

标签:container,函数,DOM,patch,虚拟,diff,节点
From: https://blog.csdn.net/2301_76917834/article/details/141093961

相关文章

  • 怎么用Stable Diffusion做设计解题?
    前言前言此篇不是StableDiffusion的软件教程,而是面向AIGC绘图工作流的一些开阔性思路与方法分享,核心观点即“商业需求是题面,AIGC是计算工具,解题思路还得是设计师!”,总之面对AIGC设计不要焦虑也不用回避,本篇笔者期望能够和大家一起探讨AIGC绘图如何为我所用,如何融入设计......
  • STM32 虚拟串口发不出数据
    在某个项目上,使用到了USB虚拟串口功能,芯片是STM32F105,在芯片刚复位时功能是正常,但是多发几次数据后,就发不出去了,一直返回USBD_BUSY,在下图中的344行返回USBD_BUSY解决办法是在这个函数内增加一些代码,等待数据发送完成之后再退出,或者超时退出,超时时间可以自己调整,根据自己的使......
  • 『SD』Stable Diffusion WebUI 安装插件(以汉化为例)
    前言本文简介StableDiffusionWebUI是允许用户自行安装插件的,插件的种类有很多,有将页面翻译成中文的插件,也有提示词补全插件,也有精细控制出图的插件。以汉化为例,StableDiffusionWebUI默认是英文的,我们只需装个汉化插件然后重启一下项目就能把页面变成中文了。安装......
  • Cisco ASAv 9.20.3 - 思科自适应安全虚拟设备 (ASAv)
    CiscoASAv9.20.3-思科自适应安全虚拟设备(ASAv)CiscoAdaptiveSecurityVirtualAppliance(ASAv)请访问原文链接:https://sysin.org/blog/cisco-asav/,查看最新版。原创作品,转载请保留出处。思科自适应安全虚拟设备(ASAv):跨物理和虚拟环境扩展安全性思科自适应安全虚......
  • diff命令的参数详解和实例
    diff命令参数:diff-找出两个文件的不同点总览diff[选项]源文件目标文件描述在最简单的情况是,diff比较两个文件的内容(源文件和目标文件).文件名可以是-由标准输入设备读入的文本.作为特别的情况是,diff--比较一份标准输入的它自己的拷贝如果源文件是一个目......
  • vimdiff使用
    源程序文件(通常是纯文本文件)比较和合并工具一直是软件开发过程中比较重要的组成部分。现在市场上很多功能很强大的专用比较和合并工具,比如BeyondCompare;很多IDE或者软件配置管理系统,比如Eclipse,RationalClearCase都提供了内建的功能来支持文件的比较和合并。当远程工作在Uni......
  • mysql+vsftpd 实现FTP的虚拟用户
    mysql+vsftpd 实现FTP的虚拟用户1)安装相关软件包下载mysqlpam验证的软件包wgethttp://mirrors.sohu.com/fedora-epel/6Server/x86_64/pam_mysql-0.7-0.12.rc1.el6.x86_64.rpmhttp://mirrors.sohu.com/fedora-epel/6Server/x86_64/此网站是RHEL6.x的epel相关的软件包的......
  • Domcomp:省心好用的国外域名比价网站
    先简单播报下今日奥运热点:1、金牌榜:中国29枚暂列第二;2、赛事预告:21:00央视5套乒乓男团决赛。言归正传,话说域名注册商Dynadot和NameSilo虽性价比较高,但也不能说域名价格每时每刻都是最低的。要想快速买到价格最低的域名,还得借助域名比价网站,今天就给大家分享其中的佼佼者——Domc......
  • esxi 虚拟机 导出 & 导入
    将esxi上的虚拟机win10-demo导出到本地c:\xxx\win10-demo.ova,格式OVAesxi地址:192.168.99.251,用户名:root,密码:PASSWDovftool.exevi://root:[email protected]/win10-democ:\xxx\win10-demo.ova将本地的c:\xxx\win10-demo.ova导入esxi,创建新的虚拟机,名字win10-01......
  • Arrays类、Random类和包装类(8大基本数据类型)的用法
    1、Arrays:是java提供专门针对数据做操作的工具类,该类没有构造方法,且方法都是静态的  成员方法:    publicstaticStringtoString(int[]a)将任意一个数组中的所有元素以字符串的形式拼接返回    publicstaticvoidsort(int[]a)冒泡排序  ......