L'incorporation de SVG dans ReactJS
Est possible d'intégrer du SVG balisage dans un ReactJS composant?
render: function() {
return (
<span>
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmln ...
</span>
);
}
Les résultats dans l'erreur:
De l'espace de noms d'attributs ne sont pas pris en charge. ReactJSX n'est pas XML.
Ce qui est le plus léger moyen de le faire. En utilisant quelque chose comme Réagir ART est overkill pour ce que je suis en train de faire.
- Pouvez-vous créer un jsbin? Il pourrait être aussi simple que de changer votre ouverture de balise SVG juste
<svg id="Layer_1">
(ou encore mieux, sans l'id). Edit: voici un exemple: jsbin.com/nifemuwi/2/edit?js,sortie - Merci! C'était que simple dans ce cas. Regarder Ben la réponse de si. Bon à savoir vous pouvez obtenir autour de la jsx analyse lorsque vous en avez besoin.
Vous devez vous connecter pour publier un commentaire.
Mise à jour 2016-05-27
Que de Réagir v15, le support de SVG dans de Réagir est (proche?) 100% de la parité avec le navigateur actuel de soutien pour le format SVG (source). Vous avez juste besoin d'appliquer une partie de la syntaxe de transformations pour le rendre compatible JSX, comme vous avez déjà commencé à le faire pour le HTML (
class
→className
,style="color: purple"
→style={{color: 'purple'}}
). Pour n'importe quel espace de noms (séparées par des virgules) attribut, par exemplexlink:href
, retirez le:
et de tirer profit de la seconde partie de l'attribut, par exemplexlinkHref
. Voici un exemple d'un svg avec<defs>
,<use>
, et des styles en ligne:Travail codepen démo
Pour plus de détails sur le soutien spécifique, vérifiez les docs’ liste des attributs SVG. Et voici le (maintenant fermé) GitHub problème, qui s'est déplacé de soutien pour des espaces de SVG attributs.
Réponse précédente
Vous pouvez faire un simple SVG intégrer sans avoir à utiliser
dangerouslySetInnerHTML
simplement en enlevant l'espace de noms d'attributs. Par exemple, cela fonctionne:À quel point vous pouvez penser à ajouter des accessoires comme
fill
, ou tout autre chose qui pourrait être utile à configurer..class1, .class2{fill: #005baa;}
" Comment puis-je résoudre ce problème?classB
et cela a fonctionné: codepen.io/acusti/stylo/BVJzNgSi vous venez d'avoir une statique svg chaîne que vous souhaitez inclure, vous pouvez utiliser
dangerouslySetInnerHTML
:et de Réagir comprendra le balisage directement, sans traitement du tout.
Selon une réagir développeur, 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 réagir 0.14Exemple
Si vous souhaitez le charger à partir d'un fichier, vous pouvez essayer d'utiliser Réagir-inlinesvg - c'est assez simple et directe.