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 use
o xlink:href
son compatibles.
¿Es posible usar sprites svg y cargarlos de esta manera en ReactJS?
<use xlinkHref="/svg/svg-sprite#my-icon" />
.xlink:href
está en desuso, ahora se supone que solo debe usarhref
- developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:hrefxlink:href
por 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 utilizarxlinkHref
como se menciona a continuación.MDN dice que
xlink:href
está en desuso a favor dehref
. Debería poder utilizar elhref
atributo directamente. El siguiente ejemplo incluye ambas versiones.A partir de React 0.14 ,
xlink:href
está 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
href
vsxlink:href
y 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:href
ha quedado obsoleto y la recomendación es utilizarlohref
sin 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:space
convierte 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 -S
luego 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