【发布时间】:2019-04-25 15:02:12
【问题描述】:
对于我正在创建的自我记录风格指南,我有一个接受children 的CodeSample 组件。我需要将children 的exact 字符串呈现为字符串。
<CodeSample language="tsx">
<div className="some-thing">
<Icon name="some-icon" />
</div>
</CodeSample>
当然,在我的组件中,我可以轻松地渲染孩子,但我还需要显示孩子的原始/原始 JSX。我尝试过ReactDOMServer.renderToString(...),但这包括许多不同的属性,并且还重新格式化了原始 JSX。我也尝试过jsx-to-string 包,但这也没有给我准确/原始/原始的 JSX。
或者我可以向CodeSample 发送一个字符串并将其用作原始示例文本,并将该字符串呈现为实际示例组件。我尝试使用 ReactDomServer.renderToString 和 renderToStaticMarkup 来完成此操作,但在这两种情况下,输出都不是原始 JSX。
明确地说,首选方法是使用如上所示的 HTML,并能够将原始 children 捕获为字符串并将其用作代码示例。
我尝试了this solution(进行了一些调整),但它没有给我原始/原始 JSX,它包含额外的道具,如果我为导入设置别名,它使用别名的原始名称。
示例
原始片段 (JSX)
<div className="input-group">
<div className="input-group-prepend">
<span className="input-group-text">
<FA icon={faSearch} />
</span>
</div>
<input type="text" className="form-control"/>
</div>
预期结果(文本)
(和原版一模一样)
实际结果
<div className="input-group">
<div className="input-group-prepend">
<span className="input-group-text">
<FontAwesomeIcon icon={{prefix:fas,iconName:search,icon:[512,512,[],f002,M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z]}} border="false" className="" mask="null" fixedWidth="false" inverse="false" flip="null" listItem="false" pull="null" pulse="false" rotation="null" size="null" spin="false" symbol="false" title="" transform="null" />
</span>
</div><input type="text" className="form-control" />
</div>
【问题讨论】:
-
有趣。我在这里更新了标题。在我阅读这篇文章之前,我并不清楚这是关于什么的。祝你好运。
-
但这包括许多不同的属性,并且还重新格式化了原始 JSX - 你能详细说明一下吗?到底有什么不同?
-
只需在构建期间创建任务以将组件保存为 .txt 并为其使用正确的加载器。
-
所以澄清一下,你想渲染
CodeSample的孩子并且有原始的JSX sn-p 可用吗?有一些示例输出(在 HTML 中)可能会帮助人们更好地理解这一点 -
@estus -- 添加示例。
标签: javascript reactjs