Ist dies also die einzige Möglichkeit, rohes HTML mit Reactjs zu rendern?
// http://facebook.github.io/react/docs/tutorial.html
// tutorial7.js
var converter = new Showdown.converter();
var Comment = React.createClass({
render: function() {
var rawMarkup = converter.makeHtml(this.props.children.toString());
return (
<div className="comment">
<h2 className="commentAuthor">
{this.props.author}
</h2>
<span dangerouslySetInnerHTML={{__html: rawMarkup}} />
</div>
);
}
});
Ich weiß, dass es einige coole Möglichkeiten gibt, Dinge mit JSX zu markieren, aber ich bin hauptsächlich daran interessiert, rohes HTML (mit allen Klassen, Inline-Stilen usw.) rendern zu können. So etwas Kompliziertes:
Ich möchte das alles nicht in JSX neu schreiben müssen.
Vielleicht denke ich da ganz falsch. Bitte korrigieren Sie mich.
Das ist fast JSX. Wenn Sie viel Markup als reines HTML rendern, verlieren Sie den Vorteil einer Bibliothek wie React. Ich würde empfehlen, die kleinen Änderungen (wie “class” -> “className”) vorzunehmen, damit React die Elemente handhaben kann.
Es gibt jetzt sicherere Methoden zum Rendern von HTML. Ich habe dies in einer früheren Antwort hier behandelt. Sie haben 4 Möglichkeiten, die letzten verwendet dangerouslySetInnerHTML.
Methoden zum Rendern von HTML
Am einfachsten – Verwenden Sie Unicode, speichern Sie die Datei als UTF-8 und legen Sie die charset zu UTF-8.
<div>{'First · Second'}</div>
Sicherer – Verwenden Sie die Unicode-Nummer für die Entität innerhalb einer Javascript-Zeichenfolge.
frage mich, was andere Attribute erhält dangerouslySetInnerHTML außer __html
– Juan Solano
12. April 2019 um 16:25 Uhr
@JuanSolano keine, laut den Auto-Complete-Einträgen in einer TypeScript-Umgebung.
– Andreas Linnert
17. Februar 2020 um 12:44 Uhr
In einer ähnlichen Frage, stackoverflow.com/questions/19266197/…, war diese Antwort nicht allzu gut. Vielleicht passt es besser zu dieser Frage oder vielleicht lesen die Leute die Antwort nicht … : D
– 425nesp
18. Mai 2020 um 1:45 Uhr
Die Leute geraten in Bezug auf DangerousSetInnerHtml aus der Form. Während Entwickler verstehen sollten, wie es geht möglicherweise ein Vektor für XSS-Angriffe ist, gibt es gültige Anwendungsfälle, in denen dies der vernünftige pragmatische Ansatz ist, insbesondere in Fällen, in denen das HTML, das Sie festlegen, nicht aus Benutzereingaben oder aus bereinigten Benutzereingaben gebildet wird. Wenn Sie HTML kennen und einen Grund haben, es in einer Variablen oder so zu speichern, ist dies bei weitem die eleganteste Methode.
Hinweis: Ich bin der Autor des Moduls und habe es erst vor wenigen Stunden veröffentlicht. Bitte zögern Sie nicht, Fehler oder Probleme mit der Benutzerfreundlichkeit zu melden.
verwendet es intern DangerlySetInnerHTML?
– Yash Sharma
13. Juni 2018 um 10:44 Uhr
Ich habe gerade den Code überprüft. Es scheint nicht gefährlich SetInnerHTML zu verwenden.
– Ajay Raghav
11. Juni 2019 um 6:49 Uhr
Mike, betreust du dieses npm-Modul immer noch aktiv?
– Daniel
11. Juli 2019 um 17:05 Uhr
Hey Daniel, ich weiß es nicht und einer der Mitwirkenden hat es übernommen und die letzte Version vor 7 Monaten veröffentlicht. Sehen github.com/aknuds1/html-to-react
– Mike Nikles
11. Juli 2019 um 17:42 Uhr
Dies ist aufgebläht und verwendet Ramda usw. und große Bibliotheken – ich empfehle es nicht
– Evanjmg
30. September 2020 um 14:49 Uhr
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 Ihre Benutzer leicht versehentlich einem Cross-Site-Scripting-Angriff (XSS) ausgesetzt werden können.
Es ist besser/sicherer, Ihr rohes HTML zu bereinigen (z. B. mit DOMPurify), bevor Sie es in das DOM über injizieren dangerouslySetInnerHTML.
DOMreinigen – ein DOM-exklusiver, superschneller, übertoleranter XSS-Reiniger für HTML, MathML und SVG. DOMPurify arbeitet mit einem sicheren Standard, bietet aber viele Konfigurierbarkeiten und Hooks.
Das ist genau das, wonach ich in dieser Antwort gesucht habe. Es sollte mehr Upvotes haben
– lamerr
20. Mai 2020 um 12:30 Uhr
Danke dafür. Dies sollte die richtige Antwort sein.
– College-Code
6. Januar 2021 um 3:25 Uhr
Dies ist der Ansatz, den ich in Betracht ziehen könnte – Danke!
– Wladyn
4. April 2021 um 10:41 Uhr
Ich habe dies ohne JSDOM verwendet. Es funktionierte wie ein Zauber. Danke! Als ich diesen Thread las, wurde mir klar, wie anfällig für XSS-Angriffe eine Web-App mit einem CMS für technisch nicht versierte Personen sein könnte.
– Wladyn
6. April 2021 um 9:06 Uhr
Verdammt! Danke Yuci! Diese Antwort sollte berücksichtigt und akzeptiert werden.
– Agent K
2. Juli 2021 um 15:55 Uhr
Cory Robinson
Ich habe dies in schnellen und schmutzigen Situationen verwendet:
Das ist fast JSX. Wenn Sie viel Markup als reines HTML rendern, verlieren Sie den Vorteil einer Bibliothek wie React. Ich würde empfehlen, die kleinen Änderungen (wie “class” -> “className”) vorzunehmen, damit React die Elemente handhaben kann.
– Ross Allen
14. Januar 2015 um 6:03 Uhr
Für dieses spezielle Beispiel hat jemand schon die Arbeit für Sie erledigtaber die Frage steht immer noch für den allgemeinen Fall.
– Randy Morris
14. Januar 2015 um 12:07 Uhr
medium.com/@to_pe/…
– TechDog
23. November 2017 um 16:04 Uhr
HTML zu JSX konvertieren: transform.tools/html-to-jsx
– Lasor
22. Februar 2021 um 23:12 Uhr