渲染器renderer的实现思路,总体分为三步
- 创建元素:
- 为元素添加属性和事件
- 处理children
const vnode = {
tag:"div",
props:{
onClick:()=>alert("hello")
},
children:'click me'
}
function renderer (vnode,container){
const el = document.createElement(vnode.tag)
for(const key in vnode.props){
if(/^on/.test(key)){
el.addEventListener(
key.substr(2).toLowerCase(),
vnode.props[key]
)
}
}
if(typeof vnode.children === "string"){
el.appendChild(document.createTextNode(vnode.children))
}else if(Array.isArray(vnode.children)){
vnode.children.forEach(child => renderer(child.el)
);
}
container.appendChild(el)
}
renderer(vnode,document.body)