0
点赞
收藏
分享

微信扫一扫

虚拟dom 自学笔记 入门级

诗远 2022-04-17 阅读 43

虚拟dom

根据 snabbdom 进行渲染    自己可以百度搜索

呈现码

index.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <h1>虚拟DOm的</h1>
    <div id="container"></div>
    <button id="btn">改变</button>

//必须引入片段
    <script src="https://cdn.bootcdn.net/ajax/libs/snabbdom/0.7.4/h.js"></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/snabbdom/0.7.4/snabbdom-class.js"></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/snabbdom/0.7.4/snabbdom-eventlisteners.js"></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/snabbdom/0.7.4/snabbdom-props.js"></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/snabbdom/0.7.4/snabbdom-style.js"></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/snabbdom/0.7.4/snabbdom.js"></script>
    <script src="./test.js"></script>

</body>

</html>

test.js

//引入snabbdom库
const snabbdom = window.snabbdom
//将vnode (虚拟节点)塞入空的容器中
const patch = snabbdom.init([
    snabbdom_class,
    snabbdom_props,
    snabbdom_style,
    snabbdom_eventlisteners
])
//创建vnode (虚拟节点)
const h = snabbdom.h

//空的容器
const container = document.getElementById('container');

// 获取按钮节点
const btn = document.getElementById('btn')

//创建vnode        **结构h()函数必须一样(标签,属性style,内容如孩子[]表示;如没有本标签内容)**
const vnode = h('ul#list', {}, [
    h('li.item', {}, '第一项'),
    h('li.item', {}, '第二项'),
])

patch(container, vnode)

//点击时 重新渲染虚拟dom    如重新渲染 的标签没有发生变化是不会重新加载的 只会加载重新渲染的
btn.addEventListener('click', () => {
    const newVnode = h('ul#list', {}, [
        h('li.item', {}, '第一项'),
        h('li.item', {}, '第二项11111'),
        h('li.item', {}, '第三项'),
    ])

    // 用新的vnode 去更新 替换旧的vnode
    patch(vnode, newVnode)

//下面可以省略
    vnode = newVnode
})
举报

相关推荐

0 条评论