Hier ist, was ich versucht habe und wie es schief geht.
Das funktioniert:
<div dangerouslySetInnerHTML={{ __html: "<h1>Hi there!</h1>" }} />
Das geht nicht:
<div dangerouslySetInnerHTML={{ __html: this.props.match.description }} />
Die Beschreibungseigenschaft ist nur eine normale Zeichenfolge von HTML-Inhalten. Es wird jedoch als Zeichenfolge gerendert, aus irgendeinem Grund nicht als HTML.
Irgendwelche Vorschläge?
javascript
html
reactjs
jsx
Sergio Tapia
quelle
quelle
dangerouslySetInnerHTML
VerwendungFragment
von React v16. Überprüfen Sie die nächste Antwort von @ brad-adamsEnthält
this.props.match.description
Ist ein String oder ein Objekt? Wenn es sich um eine Zeichenfolge handelt, sollte diese problemlos in HTML konvertiert werden. Beispiel:Ergebnis: http://codepen.io/ilanus/pen/QKgoLA?editors=1011
Wenn Sie jedoch
description: <h1 style="color:red;">something</h1>
keine Anführungszeichen''
haben, erhalten Sie:Wenn es sich um eine Zeichenfolge handelt und Sie kein HTML-Markup sehen, ist das einzige Problem, das ich sehe, ein falsches Markup.
AKTUALISIEREN
Wenn Sie es mit HTMLEntitles zu tun haben. Sie müssen sie entschlüsseln, bevor Sie sie an senden
dangerouslySetInnerHTML
, deshalb haben sie es gefährlich genannt :)Arbeitsbeispiel:
quelle
this.props.match.description
ist eine Zeichenfolge, kein Objekt. Was meinst du mit falschem Markup? Meinen Sie nicht geschlossene Tags? Reagieren sollte es einfach nicht rendern?<p><strong>Our Opportunity:</strong></p>
Ich benutze 'react-html-parser'
Quelle auf npmjs.com
Erhöhen Sie den Kommentar von @ okram für mehr Sichtbarkeit:
quelle
Converts HTML strings directly into React components avoiding the need to use dangerouslySetInnerHTML
von npmjs.comA utility for converting HTML strings into React components. Avoids the use of dangerouslySetInnerHTML and converts standard HTML elements, attributes and inline styles into their React equivalents.
Wenn Sie die Kontrolle darüber haben, woher die HTML-Zeichenfolge stammt (dh irgendwo in Ihrer App), können Sie von der neuen
<Fragment>
API profitieren und Folgendes tun:quelle
Fragment
API war es für mich immer ein Schmerz, zusätzlichespan
Wraps zu erfordern , die manchmal mit Flex-Layouts zu tun hatten. Als ich auf diese Frage stieß und nach einer möglichen Lösung suchte, dachte ich, ich würde erzählen, wie ich mit den Dingen umgegangen bin .Some text <strong>wrapped with strong</strong>
enthält HTML-Tagstrong
.Sie verwenden nur die gefährlich-SetInnerHTML-Methode von React
<div dangerouslySetInnerHTML={{ __html: htmlString }} />
Oder Sie können auf einfache Weise mehr implementieren: Rendern Sie den HTML-Code in der React-App
quelle
gefährlichSetInnerHTML
gefährlichSetInnerHTML ist Reacts Ersatz für die Verwendung von innerHTML im Browser-DOM. Im Allgemeinen ist das Festlegen von HTML aus Code riskant, da es leicht ist, Ihre Benutzer versehentlich einem XSS-Angriff (Cross-Site Scripting) auszusetzen. Sie können HTML also direkt in React festlegen, müssen jedoch gefährlich SetInnerHTML eingeben und ein Objekt mit einem __html-Schlüssel übergeben, um sich daran zu erinnern, dass es gefährlich ist. Beispielsweise:
quelle
Ich benutze innerHTML zusammen, um Folgendes zu überspannen:
quelle
componentDidMount() { this.message.current.innerHTML = this.state.selectedMessage.body; }
, ist Body das entkommene HTML für mich.In meinem Fall habe ich react-render-html verwendet
Installieren Sie zuerst das Paket von
npm i --save react-render-html
dann,
quelle
Ich konnte nicht damit
npm build
arbeitenreact-html-parser
. In meinem Fall konnte ich jedoch https://reactjs.org/docs/fragments.html erfolgreich nutzen . Ich musste einige HTML-Unicode-Zeichen anzeigen, aber sie sollten nicht direkt in JSX eingebettet sein. Innerhalb der JSX musste es aus dem Status der Komponente ausgewählt werden. Das Komponentencode-Snippet ist unten angegeben:quelle
Ich benutze https://www.npmjs.com/package/html-to-react
quelle
Wenn Sie die Kontrolle über die {this.props.match.description} haben und JSX verwenden. Ich würde empfehlen, "gefährlichSetInnerHTML" nicht zu verwenden.
quelle