前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【前端芝士树】模拟虚拟DOM挂载

【前端芝士树】模拟虚拟DOM挂载

作者头像
CloudCat
发布2019-05-26 10:58:41
2350
发布2019-05-26 10:58:41
举报

【前端芝士树】虚拟DOM挂载是如何实现的

问题描述

给出如下虚拟dom的数据结构,如何实现简单的虚拟dom,渲染到目标dom树

代码语言:javascript
复制
//样例数据
let demoNode = ({
  tagName: 'ul',
  props: {'class': 'list'},
  children: [
    ({tagName: 'li', children: ['douyin']}),
    ({tagName: 'li', children: ['toutiao']})
  ]
});

渲染结果如下所示:

代码语言:javascript
复制
 <ul class="list">
     <li>douyin</li>
     <li>toutiao</li>
 </ul>

用innerHTML实现RenderNode

代码语言:javascript
复制
/**
 * @param node
 * @return {string}
 * */
function RenderNode(node) {
  let result='';
  if(typeof node === 'string'){
    result += node;
  } else if(Array.isArray(node)){
    node.forEach(item => {
      result += RenderNode(item);
    });
  }else{
    let tag = node.tagName || 'div';
    let props = '';
    if (node.props) {
      let nodeProps = node.props;
      for (let key in nodeProps) {
        props += (` ${key}="${nodeProps[key]}"`);
      }
    }
    if(node.children && node.children.length){
      result = `<${tag + props}>${RenderNode(node.children)}</${tag}>`;
    }
  }
  return result;
}

let renderHTML = RenderNode(demoNode);
console.log(renderHTML);
let main = document.getElementById('main');
main.innerHTML = renderHTML;
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 【前端芝士树】虚拟DOM挂载是如何实现的
    • 问题描述
      • 用innerHTML实现RenderNode
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档