首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在没有babel的情况下动态创建“编译的”React组件?

如何在没有babel的情况下动态创建“编译的”React组件?
EN

Stack Overflow用户
提问于 2017-11-04 18:01:15
回答 2查看 268关注 0票数 1

如果我有一个嵌套的节点对象,就像这样(忽略语法):

代码语言:javascript
代码运行次数:0
运行
复制
const el = {
  node: {
    name: 'Svg',
    attrs: { height: "40", width: "40", viewBox: "0 0 22 22" },
    children: [
      {
        node: {
          name: 'G',
          attrs: null,
          children: [
            {
              node: {
                name: 'Path',
                attrs: { d: "M15.39,1c0.107" },
                children: nullm
              }
            }
          ]
        }
      }
    ]
  }
};

有没有可能在我的React Native应用程序的JS中动态地动态创建一个嵌套的“编译的”React元素,而不使用babel,比如:

代码语言:javascript
代码运行次数:0
运行
复制
function el() {
  return React.createElement(
    Svg,
    { height: "40", width: "40", viewBox: "0 0 22 22" },
    React.createElement(
      G,
      null,
      React.createElement(
        Path,
        { d: "M15.39,1c0.107" }
      )
    )
  );
};
EN

回答 2

Stack Overflow用户

发布于 2017-11-04 20:51:19

你想做这样的事情吗?

代码语言:javascript
代码运行次数:0
运行
复制
function createNodeElement(node) {
  return React.createElement(
    node.name,
    node.attrs,
    node.children && node.children.map(el => createNodeElement(el)),
  )
}

如果答案不能满足您的需求,我们可以讨论更多。

票数 1
EN

Stack Overflow用户

发布于 2017-11-04 20:52:32

@lumio修正了我的课程,我只需要渲染js数据结构。因此,使用以下js:

代码语言:javascript
代码运行次数:0
运行
复制
const json = {
  type: 'Svg',
  props: {
    height: 170,
    viewBox: '0 0 100 170',
    width: 100,
  },
  children: [
    {
      type: 'Path',
      props: {
        d: 'M100 0H50v85l50-85z',
        fill: '#0f0',
      },
    },
    {
      type: 'Path',
      props: {
        d: 'M0 170h50V85L0 170z',
        fill: '#a0f',
      },
    },
  ],
};

和以下组件:

代码语言:javascript
代码运行次数:0
运行
复制
const types = { Svg, Path };
const jsonToComponent = (obj, key) => {
  const El = types[obj.type];
  const children = obj.children ? obj.children.map(jsonToComponent) : [];

  return (
    <El
      key={key}
      {...obj.props}
    >
      {children}
    </El>
  );
};

我可以在另一个虚拟组件中呈现它:

代码语言:javascript
代码运行次数:0
运行
复制
render() {
  return jsonToComponent(props.json);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47109538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档