【问题标题】:Convert string to React JSX将字符串转换为 React JSX
【发布时间】:2026-01-31 08:55:02
【问题描述】:

目标:我想将包含 React 组件的字符串转换成功能齐全的 JSX。

Stack Overflow 上有很多解决方案,比较简单的例子是这样的:

render()
{
  let txt = "<span><b>Hello World!</b></span>";

  return <div dangerouslySetInnerHTML={{__html: txt}}></div>;
    //---OR---
  return ReactHtmlParser(txt); //using react-html-parser
    //---OR---
  return parse(txt); //using html-react-parser
}

但如果相反,let txt = "&lt;MyComponent/&gt;";,其中 MyComponent 是一个自定义 React 组件,我无法找到让浏览器正确解释它的方法。

使用一些方法,它会以小写&lt;mycomponent&gt;&lt;mycomponent/&gt; 进入DOM。使用其他技巧,我可以将它作为大写的&lt;MyComponent&gt;&lt;MyComponent/&gt; 放入 DOM。但是浏览器不会将 MyComponent 解释为 React 组件,也不会执行里面的代码。

我对@9​​87654327@ 的答案不感兴趣,因为我不想一次将它用于一个组件。我想解析 JSX 的长字符串。

【问题讨论】:

  • 你看过MDX吗?它是 Markdown 的扩展,但仍应满足您的用例。
  • @backtick 感谢您向我展示 MDX。你说得对,它可能满足我的用例,我会进一步调查。
  • @backtick mdxjs.com 的 Introduction 和 Playground 页面基本上可以满足我的要求,通过将
  • 这是游乐场页面的source
  • @howrad 到目前为止一切顺利吗?

标签: reactjs dom html-parsing


【解决方案1】:

没有库可以解析包含自定义 React 组件的字符串。

如果您考虑一下,这样的库需要知道您的组件位置,因为它需要导入和渲染它。此外,组件的实际名称在 React 中是没有意义的,您必须在范围内提供其实例。

因此,您唯一的解决方案是为自己编写一个自定义解析器。

这样的解决方案将大致保存一个字典,将字符串映射到它们的组件(也需要处理道具和重复命名)。

import {MyComponent,Button} from 'components';

export const Components = {
   MyComponent,
   Button
};

myParser('<MyComponent/>'); // Match MyComponent

您可以使用ReactDOMServer,因此您可以使用元素实例来呈现其 HTML。

【讨论】:

  • Dennis,当您制作 React fiddle 时,JSFiddle 使用什么?在某种程度上,它必须执行以字符串形式出现在浏览器中的 React 代码。
  • 不是,它只是在其他服务器上运行一台机器
  • @DennisVash 实际上,这正是react-jsx-parser 所做的,正如您所说,它通过允许实现者提供名称到组件函数的映射来实现。然后,解析器本质上充当 Jsx 的运行时解释器,并绑定到任何正在转换为原生 HTML 或已在地图中提供的组件。我是 lib 的作者,所以我有偏见 - 但它可能是解决这个问题的好方法。
【解决方案2】:

你可以使用 -

  • html-react-parser
  • react-jsx-parser

【讨论】: