Est-il possible d'incorporer du balisage SVG dans un composant ReactJS?
render: function() {
return (
<span>
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmln ...
</span>
);
}
Résultats dans l'erreur:
Les attributs d'espace de noms ne sont pas pris en charge. ReactJSX n'est pas XML.
Quelle est la manière la plus légère de faire cela. Utiliser quelque chose comme React ART est bien exagéré pour ce que j'essaie de faire.
javascript
svg
reactjs
Nicolas
la source
la source
<svg id="Layer_1">
(ou encore mieux, sans l'ID). Edit: voici un exemple: jsbin.com/nifemuwi/2/edit?js,outputRéponses:
Mise à jour 27/05/2016
Depuis React v15, la prise en charge de SVG dans React est (proche de?) 100% de parité avec la prise en charge actuelle du navigateur pour SVG ( source ). Il vous suffit d'appliquer quelques transformations de syntaxe pour le rendre compatible JSX, comme vous devez déjà le faire pour HTML (
class
→className
,style="color: purple"
→style={{color: 'purple'}}
). Pour tout attribut d'espacement de nom (séparé par deux-points), par exemplexlink:href
, supprimez le:
et mettez en majuscule la deuxième partie de l'attribut, par exemplexlinkHref
. Voici un exemple d'un svg avec<defs>
,<use>
et les styles en ligne:Démo de travail codepen
Pour plus de détails sur la prise en charge spécifique, consultez la liste des attributs SVG pris en charge dans la documentation . Et voici le problème (maintenant fermé) de GitHub qui suivait la prise en charge des attributs SVG avec espace de nom.
Réponse précédente
Vous pouvez faire une simple intégration SVG sans avoir à l'utiliser
dangerouslySetInnerHTML
en supprimant simplement les attributs de l'espace de noms. Par exemple, cela fonctionne:À quel point vous pouvez penser à ajouter des accessoires comme
fill
, ou tout ce qui pourrait être utile à configurer.la source
.class1, .class2{fill: #005baa;}
' Comment puis-je résoudre ce problème?classB
et cela a fonctionné: codepen.io/acusti/pen/BVJzNgSi vous avez juste une chaîne svg statique que vous souhaitez inclure, vous pouvez utiliser
dangerouslySetInnerHTML
:et React inclura le balisage directement sans le traiter du tout.
la source
Selon un développeur React , vous n'avez pas besoin de l'espace de noms xmlns. Si vous avez besoin de l'attribut,
xlink:href
vous pouvez utiliser xlinkHref de react 0.14Exemple
la source
Si vous souhaitez le charger à partir d'un fichier, vous pouvez essayer d'utiliser React-inlinesvg - c'est assez simple et direct.
la source