当前位置: 首页 > 面试题库 >

将SVG嵌入到ReactJS中

丁高峯
2023-03-14
问题内容

是否可以将SVG标记嵌入到ReactJS组件中?

render: function() {
  return (
    <span>
      <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmln ...
    </span>
  );
}

结果错误:

不支持命名空间属性。ReactJSX不是XML。

什么是最简单的方法。使用React React之类的东西对于我想做的事情来说是过大的。


问题答案:

更新2016-05-27

从React
v15开始,React中对SVG的支持与当前浏览器对SVG的支持(接近?)达到100%奇偶校验(源)。您只需要应用一些语法转换就可以使其与JSX兼容,就像您已经对HTML所做的一样(classclassNamestyle="color: purple"style={{color: 'purple'}})。对于任何命名空间(用冒号分隔)的属性,例如xlink:href,删除:并大写该属性的第二部分,例如xlinkHref。下面是与SVG的例子<defs><use>以及内嵌样式:

function SvgWithXlink (props) {
    return (
        <svg
            width="100%"
            height="100%"
            xmlns="http://www.w3.org/2000/svg"
            xmlnsXlink="http://www.w3.org/1999/xlink"
        >
            <style>
                { `.classA { fill:${props.fill} }` }
            </style>
            <defs>
                <g id="Port">
                    <circle style={{fill:'inherit'}} r="10"/>
                </g>
            </defs>

            <text y="15">black</text>
            <use x="70" y="10" xlinkHref="#Port" />
            <text y="35">{ props.fill }</text>
            <use x="70" y="30" xlinkHref="#Port" className="classA"/>
            <text y="55">blue</text>
            <use x="0" y="50" xlinkHref="#Port" style={{fill:'blue'}}/>
        </svg>
    );
}

工作码笔演示

有关特定支持的更多详细信息,请查看文档的支持的SVG属性列表。这是(现已关闭的)GitHub问题,该问题跟踪对命名空间SVG属性的支持。

先前的答案

您可以进行简单的SVG嵌入,而不必dangerouslySetInnerHTML通过剥离命名空间属性来使用。例如,这有效:

        render: function() {
            return (
                <svg viewBox="0 0 120 120">
                    <circle cx="60" cy="60" r="50"/>
                </svg>
            );
        }

此时,您可以考虑添加诸如之类的道具fill,或者其他可能对配置有用的道具。



 类似资料:
  • 做这件事最轻的方法是什么。使用像反应艺术这样的东西对我试图做的事情来说是过度的。

  • 问题内容: 我发现了一个开源应用程序,该应用程序创建了一个JFrame来显示一些内容。我想将此JFrame “嵌入” 到applet中,因此Jframe中显示的所有内容都将显示在applet中- 这可能吗? 谢谢你的帮助! 问题答案: 创建框架的实例。 获取框架的内容窗格。 将内容窗格添加到小程序。

  • 问题内容: 使用标签将SVG直接包含在文档中时,您可以通过文档的样式表将CSS样式应用于SVG。但是,我试图将一种样式应用于嵌入的SVG(使用标签)。 是否可以使用以下代码? 问题答案: 简短的答案:不,因为样式不适用于文档边界。 但是,由于有标签,因此可以使用脚本将样式表插入svg文档。 这样的事情,并请注意,此代码假定已完全加载: 也可以插入一个元素来引用外部样式表: 另一个选择是使用第一种方

  • 我有一个页面,其中包含几个SVG文件。为了同步这些SVG文件的样式,我想创建一个样式表来保存所有样式信息。 然而,当像下面这样包含SVG时,CSS不会被应用。任何人都有解决方案,或者是不可能链接到 时,所有样式都被应用,并且可以看到一个绿色矩形。但是当打开< code>page.htm时,看到的只是一个黑色的长方形。因此,显然没有应用任何已定义的样式。 page.htm 图片.svg 样式. cs

  • null Equinox建议第二种选择更容易。但对于生产,他们推荐1。我不知道为什么。在哪种情况下,什么是真正更好的,为什么? 我是一个经验丰富的Tomcat用户,在Equinox中嵌入Tomcat会改变对它的管理吗?或者换句话说,嵌入Equinox的Tomcat会有什么不同?

  • 问题内容: 因此,通常包括我需要简单样式的大多数SVG图标,我这样做: 现在,我一直在玩ReactJS作为它的后期评估在我的新的前端开发堆栈可能的成分,但是我注意到,在其支持的标记/属性列表,无论是或支持。 是否可以使用svg精灵并以这种方式在ReactJS中加载它们? 问题答案: 2018年9月更新 :不建议使用此解决方案,请阅读乔恩的答案。 - 反应并不支持所有的SVG标签就像你说的,有支持的