Normalerweise mache ich Folgendes, um die meisten meiner SVG-Symbole einzuschließen, die ein einfaches Styling erfordern:
<svg>
<use xlink:href="/svg/svg-sprite#my-icon" />
</svg>
Jetzt habe ich mit ReactJS gespielt, um es als mögliche Komponente in meinem neuen Front-End-Entwicklungsstapel zu bewerten. Ich habe jedoch festgestellt, dass in der Liste der unterstützten Tags / Attribute weder use
noch xlink:href
unterstützt werden.
Ist es möglich, SVG-Sprites zu verwenden und auf diese Weise in ReactJS zu laden?
<use xlinkHref="/svg/svg-sprite#my-icon" />
.xlink:href
ist veraltet, soll jetzt nur verwendenhref
- developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:hrefxlink:href
also müssen wir es noch verwenden. Tatsächliche Webanwendungen müssen entweder den gemeinsamen Nenner der Browserfunktionen verwenden oder bestimmte Problemumgehungen / Polyfills implementieren.Property 'xlink' does not exist on type 'SVGProps<SVGImageElement>
Antworten:
Update September 2018 : Diese Lösung ist veraltet. Lesen Sie stattdessen Jons Antwort .
- -
Reagieren Sie nicht alle SVG - Tags unterstützt , wie Sie sagen, es gibt eine Liste der unterstützten Tags ist hier . Sie arbeiten an einer breiteren Unterstützung, z. B. in diesem Ticket .
Eine häufige Problemumgehung besteht darin, HTML für nicht unterstützte Tags einzufügen, z.
quelle
dangerouslySetInnerHTML
. Sie könnenxlinkHref
wie unten erwähnt verwenden.MDN sagt, dass dies zugunsten von
xlink:href
veraltet isthref
. Sie sollten dashref
Attribut direkt verwenden können. Das folgende Beispiel enthält beide Versionen.Ab 0,14 Reagieren ,
xlink:href
ist über Reagieren als Eigentum zur VerfügungxlinkHref
. Es wird als eine der "bemerkenswerten Verbesserungen" in den Versionshinweisen für 0.14 erwähnt.Update 2018-06-09: Informationen zu
href
vs-xlink:href
Attributen hinzugefügt und Beispiel aktualisiert, um beide einzuschließen . Danke @devuxerUpdate 3 : Zum Zeitpunkt des Schreibens finden Sie hier die SVG-Eigenschaften von React Master .
Update 2 : Es scheint, dass alle SVG-Attribute jetzt über "Reagieren" verfügbar sein sollten (siehe Zusammengeführtes SVG-Attribut PR ).
Update 1 : Möglicherweise möchten Sie das svg-bezogene Problem auf GitHub im Auge behalten, um zusätzliche SVG-Unterstützung zu erhalten. Es gibt Entwicklungen in den Arbeiten.Demo:
quelle
xlink:href
ist es veraltet und es wird empfohlen, eshref
ohne das Namespace-Präfix zu verwenden. (Beachten Sie jedoch, wenn Sie TypeScript verwenden, wurden die Eingaben noch nicht aktualisiert, um dies widerzuspiegeln.)Wenn Sie auf etwas stoßen
xlink:href
, können Sie das Äquivalent in ReactJS erhalten, indem Sie den Doppelpunkt entfernen und den hinzugefügten Text mit einem Kamel versehen :xlinkHref
.Sie werden wahrscheinlich irgendwann andere Namespace-Tags in SVG verwenden, wie
xml:space
usw. Die gleiche Regel gilt für sie (dhxml:space
wirdxmlSpace
).quelle
Wie bereits in Jon Surrells Antwort erwähnt, werden Use-Tags jetzt unterstützt. Wenn Sie JSX nicht verwenden, können Sie es folgendermaßen implementieren:
quelle
Ich habe einen kleinen Helfer erstellt, der dieses Problem umgeht : https://www.npmjs.com/package/react-svg-use
erst
npm i react-svg-use -S
dann einfachDadurch wird das folgende Markup generiert
quelle
SVGs können importiert und direkt als React-Komponente in Ihrem React-Code verwendet werden.
quelle