嵌套对象表示,属性表示结点
优点
- 保证性能下限,在不进行手动优化的前提下也能提供过得去的性能
- 无需手动操作dom
- 跨平台(如服务端渲染、uniapp)
缺点
- 首次渲染大量dom,多了一层虚拟dom计算,比innerHtml插入更慢
- 性能优化时,真是dom操作更快
coding
1. 一段数据转化成真是dom
function render(vnode){
if(typeof vnode === 'number'){
vnode = String(vnode)
}
if(typeof vnode === 'string'){
return document.createTextNode(vnode)
}
const element = document.createElement(vnode, tag)
if(vnode.attrs){
objects.keys(vnode).forEach(attrkey => {
element.setAttribute(key, vnode.attrs[attrkey])
})
}
if(vnode.children){
vnode.children.forEach(childNode => {
element.appendChild(render(childNode));
})
}
return element;
}
const vnode = {
tag: 'DIV',
attrs: {
id: 'app'
},
children: [
{
tag: 'SPAN',
children: [{
tag: 'A',
children: []
}]
},
{
tag: 'SPAN',
children: [{
tag: 'B',
children: []
}]
}
]
}
← 手写响应式