如何通过c语言来做网站,市场营销计划,3小时网站建设平台,合水口网站建设使用js对象来描述UI更加的灵活。“这种对象”在vue框架中被称为虚拟DOM#xff0c;渲染函数内部可以创建虚拟DOM#xff0c;然后vue.js可以将其内容进行渲染。
1.渲染器的介绍
渲染器的作用就是把虚拟DOM渲染为真实DOM 思考下#xff0c;我们有一个虚拟 DOM#xff0c;如…使用js对象来描述UI更加的灵活。“这种对象”在vue框架中被称为虚拟DOM渲染函数内部可以创建虚拟DOM然后vue.js可以将其内容进行渲染。
1.渲染器的介绍
渲染器的作用就是把虚拟DOM渲染为真实DOM 思考下我们有一个虚拟 DOM如何将它转换为真实 DOM
const vnode {tag: div,props: {onClick: () alert(hello)},children: click me
}
2.实现渲染函数renderer只考虑创建没有考虑更新逻辑情况下 两个参数。参数vnode表示虚拟 DOM 对象container表示一个真实 DOM 元素作为挂载点渲染器会把虚拟 DOM 渲染到该挂载点 使用vnode.tag作为创建的dom标签el 遍历vnode.props将属性 事件添加到DOM上事件即给元素添加监听事件 处理 children如果 children 是字符串说明它是元素的文本子节点用createTextNode如果children是数组则递归调用render函数渲染子节点并挂载到el元素下 将元素添加到挂载节点container下
div idapp/divscript// 手写render函数将自己定义的vnode对象渲染到页面/*** vnode 虚拟 DOM 对象* container 一个真实 DOM 元素作为挂载点渲染器会把虚拟 DOM 渲染到该挂载点*/function render(vnode, container) {// 使用vnode.tag作为创建的dom标签ellet el document.createElement(vnode.tag);// 遍历vnode.props将属性 事件添加到DOM上事件即给元素添加监听事件for (let key in vnode.props) {// 判断如果为事件则将其设置到el中if ((/^(on)/).test(key)) {el.addEventListener(key.substr(2).toLowerCase(), vnode.props[key]);}}// 处理 children(字符串和数组)if (typeof vnode.children string) {el.appendChild(document.createTextNode(vnode.children));} else if (Array.isArray(vnode.children)) { //是数组进行遍历并递归调用render方法vnode.children.forEach(child {render(child, el);});}// 将元素添加到挂载节点container下container.appendChild(el);}// render函数测试const container document.getElementById(app)const vnode {tag: div,props: {onClick: () alert(hello)},// children: click mechildren: [{tag: h1,props: {onClick: () alert(h1)},children: 这是h1},{tag: span,props: {onClick: () alert(span)},children: 这是span}]}render(vnode, container)/script