javascript - ReactJS konverter HTML-streng til JSX
Jeg har problemer med å håndtere Facebooks ReactJS. Hver gang jeg gjør ajax og vil vise HTML-data, viser ReactJS det som tekst. (Se figur nedenfor)
Dataene vises gjennom suksess-tilbakekallingsfunksjonen i jQuery Ajax.
$.ajax({
url: url here,
dataType: "json",
success: function(data) {
this.setState({
action: data.action
})
}.bind(this)
});
Finnes det noen enkel måte å konvertere dette til html på? Hvordan bør jeg gjøre det ved bruk av ReactJS?
Svar #1
Som standard unngår React at HTML tolkes for å forhindre XSS (Cross-site scripting). Hvis du virkelig vil gjengi HTML, kan du bruke egenskapen dangerouslySetInnerHTML:
<td dangerouslySetInnerHTML={{__html: this.state.actions}} />
React tvinger denne bevisst tungvinte syntaksen slik at du ikke ved et uhell gjengir tekst som HTML og introduserer XSS-feil.
Svar #2
Det finnes nå sikrere metoder for å oppnå dette. Dokumentasjonen har blitt oppdatert med disse metodene.
Andre metoder
Enklest - Bruk Unicode, lagre filen som UTF-8 og sett
charsettil UTF-8.<div>{'First · Second'}</div>Sikrere - Bruk Unicode-nummeret for enheten inne i en Javascript-streng.
<div>{'First \u00b7 Second'}</div>
eller
`<div>{'First ' + String.fromCharCode(183) + ' Second'}</div>`
Eller et blandet array med strenger og JSX-elementer.
<div>{['First ', <span>·</span>, ' Second']}</div>Siste Utvei - Sett inn rå HTML ved å bruke
dangerouslySetInnerHTML.<div dangerouslySetInnerHTML={{__html: 'First · Second'}} />
Svar #3
Jeg anbefaler å bruke Interweave laget av milesj. Det er et fenomenalt bibliotek som gjør bruk av en rekke geniale teknikker for å analysere og trygt sette inn HTML i DOM-en.
Interweave er et React-bibliotek for å trygt gjengi HTML, filtrere attributter, automatisk pakke inn tekst med matchere, gjengi emoji-tegn, og mye mer.
- Interweave er et robust React-bibliotek som kan:
- Render HTML trygt uten å bruke dangerouslySetInnerHTML.
- Fjern HTML-tagger på en sikker måte.
- Automatisk beskyttelse mot XSS og injeksjon.
- Rens HTML-attributter ved hjelp av filtre.
- Interpoler komponenter ved bruk av matchere.
- Autolink URL-er, IP-er, e-poster og hashtags.
- Gjengi emoji- og emotikon-tegn.
- Og mye mer!
Brukseksempel:
import React from 'react';
import { Markup } from 'interweave';
const articleContent = "<p><b>Lorem ipsum dolor laboriosam.</b> </p><p>Facere debitis impedit doloremque eveniet eligendi reiciendis <u>ratione obcaecati repellendus</u> culpa? Blanditiis enim cum tenetur non rem, atque, earum quis, reprehenderit accusantium iure quas beatae.</p><p>Lorem ipsum dolor sit amet <a href='#testLink'>this is a link, click me</a> Sunt ducimus corrupti? Eveniet velit numquam deleniti, delectus <ol><li>reiciendis ratione obcaecati</li><li>repellendus culpa? Blanditiis enim</li><li>cum tenetur non rem, atque, earum quis,</li></ol>reprehenderit accusantium iure quas beatae.</p>"
<Markup content={articleContent} /> // this will take the
<articleContent string and convert it to HTML markup.
<See: https://milesj.gitbook.io/interweave
//to install package using npm, execute the command
npm install interweave
Svar #4
npm i html-react-parser;
import Parser from 'html-react-parser';
<td>{Parser(this.state.archyves)}</td>
Svar #5
For de som fortsatt eksperimenterer, npm install react-html-parser
Da jeg installerte det, hadde det 123628 ukentlige nedlastinger.
import ReactHtmlParser from 'react-html-parser'
<div>{ReactHtmlParser(htmlString)}</div>
Svar #6
Du kan bruke følgende hvis du vil gjengi rå HTML i React
<div dangerouslySetInnerHTML={{__html: `html-raw-goes-here`}} />
Eksempel - Gjengi
Test is a good day
