¿Es posible incrustar el marcado SVG en un componente ReactJS?
render: function() {
return (
<span>
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmln ...
</span>
);
}
Resultados en el error:
Los atributos del espacio de nombres no son compatibles. ReactJSX no es XML.
¿Cuál es la forma más ligera de hacer esto? Usar algo como React ART es una exageración para lo que estoy tratando de hacer.
javascript
svg
reactjs
nicholas
fuente
fuente
<svg id="Layer_1">
(o incluso mejor, sin la identificación). Editar: he aquí un ejemplo: jsbin.com/nifemuwi/2/edit?js,outputRespuestas:
Actualizar 2016-05-27
A partir de React v15, el soporte para SVG en React es (cercano a?) 100% de paridad con el soporte actual del navegador para SVG ( fuente ). Solo necesita aplicar algunas transformaciones de sintaxis para que sea compatible con JSX, como ya tiene que hacer para HTML (
class
→className
,style="color: purple"
→style={{color: 'purple'}}
). Para cualquier atributo de espacio de nombres (separados por dos puntos), por ejemploxlink:href
, elimine:
y capitalice la segunda parte del atributo, por ejemploxlinkHref
. He aquí un ejemplo de un SVG con<defs>
,<use>
y estilos en línea:Demostración de codepen de trabajo
Para obtener más detalles sobre soporte específico, consulte la lista de documentos de atributos SVG admitidos . Y aquí está el problema (ahora cerrado) de GitHub que rastreó el soporte para los atributos SVG de espacios de nombres.
Respuesta anterior
Puede hacer una incrustación SVG simple sin tener que usar
dangerouslySetInnerHTML
simplemente quitando los atributos del espacio de nombres. Por ejemplo, esto funciona:En ese momento, puede pensar en agregar accesorios como
fill
, o cualquier otra cosa que pueda ser útil para configurar.fuente
.class1, .class2{fill: #005baa;}
' ¿Cómo puedo solucionarlo?classB
y funcionó: codepen.io/acusti/pen/BVJzNgSi solo tiene una cadena de svg estática que desea incluir, puede usar
dangerouslySetInnerHTML
:y React incluirá el marcado directamente sin procesarlo en absoluto.
fuente
Según un desarrollador de react , no necesita el espacio de nombres xmlns. Si necesita el atributo
xlink:href
, puede usar xlinkHref de react 0.14Ejemplo
fuente
Si desea cargarlo desde un archivo, puede intentar usar React-inlinesvg , que es bastante simple y directo.
fuente