如何将 JSX 作为字符串获取?

How do I get JSX as a string?

我想写一个高阶组件,比方说 AddMarkup,它有一个 child。它应该呈现 child 以及生成它的代码。例如:

<AddMarkup>
  <MyButton color="red">
    Red Button
  </MyButton>
</AddMarkup>

结果应该是这样的:

<div>
  <button style={{ color: 'red' }}>    /* Assume that MyButton is implemented this way */
    Red Button
  </button>
  <pre>
    <MyButton color="red">
      Red Button
    </MyButton>
  </pre>
</div>

我正在努力解决 <pre> 问题。有没有办法将原始 JSX 作为字符串获取(这样我就可以把它放在 <pre> 标签中)?有没有我可以应用的 Babel 或 Webpack 魔法?

可能解决这个问题的最好方法是编写一个依赖 jsx-to-string 来处理转换的自定义 Babel 插件。您需要编写代码,通过一些预定义的道具(插件设置)将代码作为字符串注入,例如 childrenAsString.

虽然这可行,但它也会将您的代码绑定到 Babel。尽管如此,如果您需要它并且对陷阱感到满意,那还是值得一试的。