首页 > 代码库 > 虚拟dom随想
虚拟dom随想
参考资料https://segmentfault.com/a/1190000005769948, https://github.com/DrakeLeung/blog/issues/8, https://github.com/livoras/blog/issues/11
虚拟dom的基本思路:
- 用 JavaScript 对象结构表示 DOM 树的结构;然后用这个树构建一个真正的 DOM 树,插到文档当中
- 当状态变更的时候,重新构造一棵新的对象树。然后用新的树和旧的树进行比较,记录两棵树差异
- 把2所记录的差异应用到步骤1所构建的真正的DOM树上,视图就更新了
Virtual DOM 本质上就是在 JS 和 DOM 之间做了一个缓存。可以类比 CPU 和硬盘,既然硬盘这么慢,我们就在它们之间加个缓存:既然 DOM 这么慢,我们就在它们 JS 和 DOM 之间加个缓存。CPU(JS)只操作内存(Virtual DOM),最后的时候再把变更写入硬盘(DOM)
// 1. 构建虚拟DOM
var tree = el(‘div‘, {‘id‘: ‘container‘}, [
el(‘h1‘, {style: ‘color: blue‘}, [‘simple virtal dom‘]),
el(‘p‘, [‘Hello, virtual-dom‘]),
el(‘ul‘, [el(‘li‘)])
])
// 2. 通过虚拟DOM构建真正的DOM
var root = tree.render()
document.body.appendChild(root)
// 3. 生成新的虚拟DOM
var newTree = el(‘div‘, {‘id‘: ‘container‘}, [
el(‘h1‘, {style: ‘color: red‘}, [‘simple virtal dom‘]),
el(‘p‘, [‘Hello, virtual-dom‘]),
el(‘ul‘, [el(‘li‘), el(‘li‘)])
])
// 4. 比较两棵虚拟DOM树的不同
var patches = diff(tree, newTree)
// 5. 在真正的DOM元素上应用变更
patch(root, patches)
虚拟dom随想
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。