Donc, normalement, pour inclure la plupart de mes icônes SVG qui nécessitent un style simple, je fais:
<svg>
<use xlink:href="/svg/svg-sprite#my-icon" />
</svg>
Maintenant, j'ai joué avec ReactJS récemment en l'évaluant comme un composant possible dans ma nouvelle pile de développement front-end, mais j'ai remarqué que dans sa liste de balises / attributs pris en charge, ni l'un use
ni l' autre ne xlink:href
sont pris en charge.
Est-il possible d'utiliser des sprites svg et de les charger de cette manière dans ReactJS?
<use xlinkHref="/svg/svg-sprite#my-icon" />
.xlink:href
est obsolète, maintenant censé simplement utiliserhref
- developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:hrefxlink:href
, nous devons donc encore l'utiliser. Les applications Web réelles doivent soit utiliser le dénominateur commun des fonctionnalités du navigateur, soit implémenter des solutions de contournement / polyfills spécifiques.Property 'xlink' does not exist on type 'SVGProps<SVGImageElement>
Réponses:
Mise à jour de septembre 2018 : cette solution est obsolète, lisez plutôt la réponse de Jon .
-
React ne prend pas en charge toutes les balises SVG comme vous le dites, il existe une liste des balises prises en charge ici . Ils travaillent sur un support plus large, par exemple dans ce ticket .
Une solution courante consiste à injecter du HTML à la place pour les balises non prises en charge, par exemple:
la source
dangerouslySetInnerHTML
. Vous pouvez utiliserxlinkHref
comme mentionné ci-dessous.MDN dit que
xlink:href
c'est déconseillé en faveur dehref
. Vous devriez pouvoir utiliser l'href
attribut directement. L'exemple ci-dessous comprend les deux versions.À partir de React 0.14 ,
xlink:href
est disponible via React en tant que propriétéxlinkHref
. Il est mentionné comme l'une des "améliorations notables" dans les notes de version pour la version 0.14.Mise à jour 09/06/2018: Ajout d'informations sur les attributs
href
vsxlink:href
et exemple mis à jour pour inclure les deux. Merci @devuxerMise à jour 3 : Au moment de la rédaction de cet article, les propriétés SVG du maître React peuvent être trouvées ici .
Mise à jour 2 : Il semble que tous les attributs svg devraient maintenant être disponibles via react (voir attribut svg fusionné PR ).
Mise à jour 1 : Vous voudrez peut-être garder un œil sur le problème lié aux svg sur GitHub pour un atterrissage supplémentaire du support SVG. Il y a des développements en cours.Démo:
la source
xlink:href
a été déconseillé, et la recommandation est d'utiliserhref
sans le préfixe d'espace de noms. (Notez, cependant, si vous utilisez TypeScript, les typages n'ont pas encore été mis à jour pour refléter cela.)Si vous rencontrez
xlink:href
, vous pouvez obtenir l'équivalent en ReactJS en supprimant le côlon et notationsCamel le texte ajouté:xlinkHref
.Vous utiliserez probablement éventuellement d'autres balises d'espace de noms dans SVG, comme
xml:space
, etc. La même règle s'applique à eux (c'est-à-direxml:space
devientxmlSpace
).la source
Comme déjà dit dans la réponse de Jon Surrell, les balises d'utilisation sont désormais prises en charge. Si vous n'utilisez pas JSX, vous pouvez l'implémenter comme ceci:
la source
J'ai créé une petite aide qui fonctionne autour de ce problème: https://www.npmjs.com/package/react-svg-use
d'abord
npm i react-svg-use -S
puis simplementet cela générera alors le balisage suivant
la source
Les SVG peuvent être importés et utilisés directement en tant que composant React dans votre code React.
la source