GitHub 地址 https://github.com/snabbdom/snabbdom#readme
//我们在页面先生成2个列表const container = document.getElementById('container')// 生成vnodeconst vnode = h('ul#list', {}, [h('li.item', {}, 'Item 1'),h('li.item', {}, 'Item 2')])patch(container, vnode)// 然后点击按钮更换内容document.getElementById('btn-change').addEventListener('click', () => {const newVnode = h('ul#list', {}, [h('li.item', {}, 'Item 1'),h('li.item', {}, 'Item B'),h('li.item', {}, 'Item 3')])patch(vnode, newVnode)})
然后在点击时,可以看到
只更新了需要更新的dom,在虚拟dom中计算出了差别,以最小化代价去修改页面。
vdom小结
- 用JS模拟DOM结构(vnode)
- 新旧vnode对比,得出最小的更新范围,最后更新DOM
- 数据驱动视图的模式下,有效控制DOM操作
