Entonces, normalmente para incluir la mayoría de mis íconos SVG que requieren un estilo simple, lo hago:
<svg>
<use xlink:href="/svg/svg-sprite#my-icon" />
</svg>
Ahora he estado jugando con ReactJS en los últimos tiempos la evaluación como un posible componente en mi nueva pila de desarrollo front-end sin embargo, me di cuenta de que en su lista de etiquetas / atributos soportados, ni useo xlink:hrefson compatibles.
¿Es posible usar sprites svg y cargarlos de esta manera en ReactJS?

<use xlinkHref="/svg/svg-sprite#my-icon" />.xlink:hrefestá en desuso, ahora se supone que solo debe usarhref- developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:hrefxlink:hrefpor lo que aún necesitamos usarlo. Las aplicaciones web reales deben utilizar el denominador común de las funciones del navegador o implementar soluciones / polyfills específicos.Property 'xlink' does not exist on type 'SVGProps<SVGImageElement>Respuestas:
Actualización de septiembre de 2018 : esta solución está obsoleta, lea la respuesta de Jon en su lugar.
-
React no admite todas las etiquetas SVG como usted dice, hay una lista de etiquetas compatibles aquí . Están trabajando en un soporte más amplio, p. Ej. En este ticket .
Una solución alternativa común es inyectar HTML en lugar de etiquetas no compatibles, f.ex:
fuente
dangerouslySetInnerHTML. Puede utilizarxlinkHrefcomo se menciona a continuación.MDN dice que
xlink:hrefestá en desuso a favor dehref. Debería poder utilizar elhrefatributo directamente. El siguiente ejemplo incluye ambas versiones.A partir de React 0.14 ,
xlink:hrefestá disponible a través de React como propiedadxlinkHref. Se menciona como una de las "mejoras notables" en las notas de la versión de 0.14.Actualización 2018-06-09: se agregó información sobre los atributos
hrefvsxlink:hrefy un ejemplo actualizado para incluir ambos. Gracias @devuxerActualización 3 : En el momento de escribir este artículo, las propiedades de React master SVG se pueden encontrar aquí .
Actualización 2 : Parece que todos los atributos svg ahora deberían estar disponibles a través de react (ver PR del atributo svg fusionado ).
Actualización 1 : es posible que desee estar atento al problema relacionado con svg en GitHub para obtener más compatibilidad con SVG. Hay novedades en proceso.Manifestación:
fuente
xlink:hrefha quedado obsoleto y la recomendación es utilizarlohrefsin el prefijo de espacio de nombres. (Nótese, sin embargo, si usted está utilizando mecanografiado, las tipificaciones todavía no se han actualizado para reflejar esto.)Si se encuentra
xlink:href, entonces se puede obtener el equivalente en ReactJS por la extirpación del colon y camelCasing el texto añadido:xlinkHref.Probablemente eventualmente usará otras etiquetas de espacio de nombres en SVG, como
xml:space, etc. La misma regla se aplica a ellos (es decir, sexml:spaceconvierte enxmlSpace).fuente
Como ya se dijo en la respuesta de Jon Surrell, las etiquetas de uso ahora son compatibles. Si no está utilizando JSX, puede implementarlo así:
fuente
Creé un pequeño ayudante que soluciona este problema: https://www.npmjs.com/package/react-svg-use
primero
npm i react-svg-use -Sluego simplementey esto generará el siguiente marcado
fuente
Los SVG se pueden importar y usar directamente como un componente de React en su código de React.
fuente