【发布时间】:2020-06-12 18:58:45
【问题描述】:
我有一个 SVG 文件:check.svg
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28.3 28.3"><path d="M25.2 3.638l-1.6 1.6c-4.3 4.3-8.9 9.2-13.2 13.6l-5.9-4.9-1.7-1.4-2.8 3.3 1.7 1.4 7.5 6.2 1.6 1.3 1.4-1.4c4.8-4.8 9.9-10.4 14.6-15l1.6-1.6-3.2-3.1z"/></svg>
我想要一个 React 组件;但我不想要任何包装标签,只是
<svg>
<path […]/>
</svg>
我知道我可以做类似的事情
const renderSvg = svg => React.createElement('svg', {
dangerouslySetInnerHTML: { __html: svg }
});
甚至更简单
const RenderSvg = (svg) => <svg dangerouslySetInnerHTML={{ __html: svg }} />;
但我最终会得到:
<svg>
<svg>
<path […]/>
</svg>
</svg>
有人知道如何在不使用外部库的情况下实现这一目标吗?
【问题讨论】:
-
如果您需要包装一些东西,但又不想在 DOM 中添加任何额外元素,您可能需要查看 Fragements。
-
只要有一个功能组件就可以正常工作,例如codesandbox.io/s/vibrant-hopper-7k8q3
-
@Ma'mounothman 不,您正在编写的是 jsx,而不是 HTML,因此已经是一个反应组件。我的 svg 是 HTML
-
@DBS,由于同样的原因,片段不会有帮助
-
不确定你想要什么,但如果你不想有重复的
svg标签,你可以只将path标签传递给你的函数。
标签: javascript reactjs svg