当前位置: 首页 > 知识库问答 >
问题:

前端 - 请问如何基于字符串做到JSX呢?

邢臻
2023-09-24

您好,请问下,我有一个字符串,如何用这个字符串作为JSX来使用呢?

const str = "AppComp"我想要得到这样的JSX:<AppComp/>

请问如何基于str这个字符串变量做到<AppComp/>?


更新1

因为其他地方已经定义了AppComp,所以直接引入,但是在这进行字符串创建JSX名称使用。

共有2个答案

施权
2023-09-24

const str = "AppComp";
const Element = str;

function MyComponent() {
return <Element />;
}
或者:
const str = "AppComp";
const element = React.createElement(str, null);

function MyComponent() {
return element;
}
不知道是否可以

钮高朗
2023-09-24

JSX 的解析是在编译期完成的,这意味着试图在运行时生成 JSX ,需要把编译器搬到运行时,技术上并非做不到,但是没有必要。
好在作为 JS 的超集,JSX 同样拥有 JS 的灵活性,像这种 string => JSX.Element 的需求可以这样实现:

function AppComp(){  return <>This is AppComp</>}const componentRecords = (() => {  const componentMap = new Map();  const errCompGen = (info) => () => <div style={{color: "red"}}>{info}</div>;  return (component) => {    if(typeof component === "string"){      return componentMap.get(component) || errCompGen(`渲染错误:${component}组件未注册`);    }    if(typeof component !== "function"){      return    }    componentMap.set(component.name, component);  }})();componentRecords(AppComp);  const strs = [    "AppComp",    "TestComp",    "AppComp",  ];  return <>  {    strs.map((i) => {      const I = componentRecords(i);      return<I/>    })  }  </>
 类似资料:
  • 假设有一串后台转换完成的JSX字符串,在React18中要如何解析成真实的React Element呢?要求事件绑定,属性绑定仍然能生效。

  • 我有一个对象的,需要根据进行排序。 列表中的每个对象都包含以下内容 现在,假设我想先按“”下单,然后按“”下单。所以苹果排名第一,芒果紧随其后。 我可以做一个普通的asc/desc排序,但这是不够的。也可以使用apache公共资源来做上面的排序?

  • 问题内容: 显然,以下是有效的语法 我想知道: 这是什么b字在前面的字符串是什么意思? 使用它有什么作用? 在什么情况下可以使用它? 我在SO上找到了一个相关的问题,但是这个问题是关于PHP的,它指出b用来表示字符串是二进制的,而不是是要从版本兼容的代码,当迁移到PHP 6时。我认为这不适用于Python。 我确实在Python站点上找到了有关使用相同语法的字符将字符串指定为的文档。不幸的是,它在

  • 请问,这里应该如何封装才能 我在看使用文档的时候: https://github.com/knex/knex 见使用代码: 比如我创建一个users的表,这里就每次都引入一下 还要进行实例化: 请问是否可以使用TypeScript做成单例直接进行请求使用呢? 设想想要一个db.ts,以后直接这样使用即可

  • 请问,如何对Electron做开启启动的配置呢,官方文档好像没有说明 1、如何设置Electron应用的开机启动,在哪里可以配置? 2、我也想要在Electron应用的设置中进行配置是否开机启动,请问如何做呢?

  • 如何基于第一个等号拆分字符串? 所以