SVG-Markup zu React-Komponente hinzufügen

8

Ich versuche eine reaktive Komponente zu erstellen, die auf diesem CodePen Markup basiert.

Meine Komponente sieht so aus:

%Vor%

Aber beim Rendern bricht es:

%Vor%

Was ist der richtige Weg, um SVG in eine React-Komponente zu integrieren?

    
fefe 24.07.2015, 18:08
quelle

1 Antwort

17

React unterstützt SVG, aber das Hauptproblem ist, dass JSX nicht mit HTML . Sie können nicht einfach irgendeinen alten Blob von HTML oder SVG-Markup kopieren und einfügen und erwarten, dass es in JSX funktioniert, ohne dass etwas unternommen werden muss, um es zu bereinigen. Die Hauptprobleme mit diesem bestimmten SVG-Snippet sind:

  1. JSX lässt keine Kommentare im HTML-Stil zu, wie in Ihrem Beispiel:

    %Vor%

    Sie müssen diese entweder vollständig entfernen oder durch JSX Javascript- ersetzen. Stil Kommentare :

    %Vor%
  2. JSX unterstützt keine XML-Namespaces. Namespaced-Elemente wie hier funktionieren nicht:

    %Vor%

    Wenn Sie sich die Liste der unterstützten SVG-Tags ansehen , metadata ist nicht enthalten, daher kann dieser Abschnitt direkt entfernt werden, da er die visuelle Ausgabe sowieso nicht beeinflusst. Beachten Sie auch, dass Namenattribute wie xml:space nicht funktionieren:

    %Vor%
  3. JSX verwendet das Attribut className anstelle von class . Dies ist notwendig, weil class ein reserviertes Schlüsselwort in Javascript ist, also etwa so:

    %Vor%

    Sollte dies werden:

    %Vor%
  4. Das Attribut style in JSX verwendet ein JavaScript-Objekt, kein String-Literal. Also Werte wie folgt:

    %Vor%

    Muss umgewandelt werden in:

    %Vor%

Okay, das sind viele Veränderungen! Aber als Belohnung für das Lesen bis hierher kann ich Sie wissen lassen, dass es einen einfachen Weg gibt, die meisten dieser Transformationen zu machen: Seite auf der React-Dokumentationsseite können Sie beliebige HTML-Snippets einfügen und die entsprechende JSX ausgeben. Es scheint, dass dies nicht die Namespace-Probleme behandelt, die ich oben erwähnt habe, aber mit ein paar manuellen Korrekturen können Sie mit einem gültigen JSX enden, der gut anzeigen .

    
hopper 24.07.2015, 19:07
quelle

Tags und Links