HTML-String in React rendern

HTML-String in React rendern

Wir werden vorstellen, wie HTML-Strings gerendert und HTML-Strings mit Escapezeichen in React gerendert werden.

HTML-String in React rendern

Wenn wir an einer großen Website arbeiten, müssen wir HTML-Komponenten wiederverwenden. Oder wenn wir mit JSON-Antworten in HTML arbeiten, müssen wir HTML-Strings in React rendern.

Lassen Sie uns ein Beispiel haben und einen normalen HTML-String rendern. Zuerst erstellen wir ein div mit einer ID root.

# react
<div id="root"></div>

Dann rendern wir den HTML-String zu root.

# react
class App extends React.Component {

constructor() {
    super();
    this.state = {
      TextRender: '<h1>This is a heading</h1><p> This is a paragraph.</p>'
    }
  }
  
  render() {
    return (
      <div dangerouslySetInnerHTML={{ __html: this.state.TextRender }} />
    );
  }
}

ReactDOM.render(<App />, document.getElementById('root'));

Ausgabe:

Rendern Sie den HTML-String in React

Im obigen Beispiel haben wir einen HTML-String gerendert. Aber wenn wir versuchen, einen maskierten HTML-String zu rendern, wird ein Fehler ausgegeben.

Versuchen wir, einen maskierten HTML-String zu rendern.

# react
class App extends React.Component {

constructor() {
    super();
    this.state = {
      TextRender: '&lt;h1&gt;This is a heading&lt;/h1&gt;&lt;p&gt; This is a paragraph.&lt;/p&gt;'
    }
  }
  
  render() {
    return (
      <div dangerouslySetInnerHTML={{ __html: this.state.TextRender }} />
    );
  }
}

ReactDOM.render(<App />, document.getElementById('root'));

Ausgabe:

Rendern Sie den maskierten HTML-String in React

Wie Sie im obigen Beispiel sehen, werden HTML-Tags aufgrund des maskierten HTML-Strings nicht korrekt gerendert.

Jetzt erstellen wir eine DecodeHtml-Funktion, um einen maskierten HTML-String in einen normalen HTML-String umzuwandeln.

# react
DecodeHtml(input){
    var a = document.createElement('div');
    a.innerHTML = input;
    return a.childNodes.length === 0 ? "" : a.childNodes[0].nodeValue;
  }

Der Code sollte also so aussehen.

# react
class App extends React.Component {

constructor() {
    super();
    this.state = {
      TextRender: '&lt;h1&gt;This is a heading&lt;/h1&gt;&lt;p&gt; This is a paragraph.&lt;/p&gt;'
    }
  }
  htmlDecode(input){
    var a = document.createElement('div');
    a.innerHTML = input;
    return a.childNodes.length === 0 ? "" : a.childNodes[0].nodeValue;
  }

  
  render() {
    return (
      <div dangerouslySetInnerHTML={{ __html: this.htmlDecode(this.state.TextRender) }} />
    );
  }
}

ReactDOM.render(<App />, document.getElementById('root'));

Die Ausgabe sollte so aussehen.

Ausgabe:

Rendern Sie die maskierte HTML-String-Funktion in React

Auf diese Weise können wir einfach maskierte HTML-Strings rendern.

Genießen Sie unsere Tutorials? Abonnieren Sie DelftStack auf YouTube, um uns bei der Erstellung weiterer hochwertiger Videoanleitungen zu unterstützen. Abonnieren
Rana Hasnain Khan avatar Rana Hasnain Khan avatar

Rana is a computer science graduate passionate about helping people to build and diagnose scalable web application problems and problems developers face across the full-stack.

LinkedIn

Verwandter Artikel - React Render