JSON2DOM = react 的 render 函数

发布于 2023-05-02 10:51:03 字数 1390 浏览 48 评论 0

问题

{
  tag: 'DIV',
  attrs:{
  id:'app'
  },
  children: [
    {
      tag: 'SPAN',
      children: [
        { tag: 'A', children: [] }
      ]
    },
    {
      tag: 'SPAN',
      children: [
        { tag: 'A', children: [] },
        { tag: 'A', children: [] }
      ]
    }
  ] }

把上诉虚拟 Dom 转化成下方真实 Dom

<div>
  <span>
    <a></a>
  </span>
  <span>
    <a></a>
    <a></a>
  </span>
</div>

答案

遍历数据创建即可

function render(virtualDOM) {
  const { tag, attrs = {}, children } = virtualDOM;
  const elem = document.createElement(tag.toLowerCase());
  for (let key in attrs) {
    elem.setAttribute(key, attrs[key]);
  }
  if (typeof children === "string") {
    elem.textContent = children;
  } else if (Array.isArray(children)) {
    children
      .map((item) => render(item))
      .forEach((dom) => {
        elem.appendChild(dom);
      });
  }

  return elem;
}

// test
const json = {
    tag: 'DIV',
    attrs:{
    id:'app'
    },
    children: [
      {
        tag: 'SPAN',
        children: [
          { tag: 'A', children: [] }
        ]
      },
      {
        tag: 'SPAN',
        children: [
          { tag: 'A', children: [] },
          { tag: 'A', children: [] }
        ]
      }
    ]
  }

render(json)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

他夏了夏天

暂无简介

0 文章
0 评论
25 人气
更多

推荐作者

wanghao

文章 0 评论 0

蓝天

文章 0 评论 0

handsomedeng

文章 0 评论 0

仙女

文章 0 评论 0

石海龙

文章 0 评论 0

dianjvnan

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文