Reactjs convertir a html


Estoy teniendo problemas para lidiar con los ReactJS de Facebook. Cada vez que hago ajax y quiero mostrar un dato html, ReactJS lo muestra como texto. (Véase la figura siguiente)

Cadena de renderizado ReactJS

Los datos se muestran a través de la función de devolución de llamada de éxito de jquery Ajax.

$.ajax({
   url: url here,
   dataType: "json",
   success: function(data) {
      this.setState({
           action: data.action
      })
   }.bind(this)
});

introduzca la descripción de la imagen aquí

¿Hay alguna manera fácil de convertir esto en html? ¿Cómo debo hacerlo usando ReactJS?

Author: Brett DeWoody, 2013-10-09

6 answers

De forma predeterminada, React escapa del HTML para evitar XSS (Cross-site scripting). Si realmente desea renderizar HTML, puede utilizar el dangerouslySetInnerHTML propiedad:

<td dangerouslySetInnerHTML={{__html: this.state.actions}} />

React fuerza esta sintaxis intencionalmente engorrosa para que no renderice accidentalmente el texto como HTML e introduzca errores XSS.

 271
Author: Sophie Alpert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-25 22:23:34

Ahora Hay métodos más seguros para lograr esto. Los documentos se han actualizado con estos métodos.

Otros Métodos

  1. Más fácil - Use Unicode, guarde el archivo como UTF-8 y establezca el charset en UTF-8.

    <div>{'First · Second'}</div>

  2. Safer - Usa el número Unicode para la entidad dentro de una cadena Javascript.

    <div>{'First \u00b7 Second'}</div>

    O

    <div>{'First ' + String.fromCharCode(183) + ' Second'}</div>

  3. O una matriz mixta con cadenas y elementos JSX.

    <div>{['First ', <span>&middot;</span>, ' Second']}</div>

  4. Last Resort - Insertar HTML raw usando dangerouslySetInnerHTML.

    <div dangerouslySetInnerHTML={{__html: 'First &middot; Second'}} />

 49
Author: Brett DeWoody,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-14 18:39:25

Encontré este violín js. esto funciona así

function unescapeHTML(html) {
    var escapeEl = document.createElement('textarea');
    escapeEl.innerHTML = html;
    return escapeEl.textContent;
}

<textarea className="form-control redactor"
                          rows="5" cols="9"
                          defaultValue={unescapeHTML(this.props.destination.description)}
                          name='description'></textarea>

Jsfiddle link

 4
Author: HMG,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-22 23:58:41

Recomiendo usar Interweavecreado por milesj. Es una biblioteca fenomenal que hace uso de un número si ingeniosas técnicas para analizar e insertar con seguridad HTML en el DOM.

Interweave es una biblioteca de react para renderizar HTML de forma segura, filtrar atributos, texto autowrap con matchers, renderizar caracteres emoji, y mucho más.

  • Interweave es una robusta biblioteca de React que puede:
    • Renderizar HTML de forma segura sin usar Peligrosamentetinnerhtml.
    • Elimine de forma segura las etiquetas HTML.
    • XSS automático y protección de inyección.
    • Limpie los atributos HTML usando filtros.
    • Interpolar componentes usando matchers.
    • Autolink URLs, IPs, emails, y hashtags.
    • Renderiza caracteres emoji y emoticonos.
    • Y mucho más!

Ejemplo De Uso:

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
 3
Author: Arman Nisch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-16 07:24:25

También puedes usar Parser() desde html-react-parser. He usado lo mismo. Enlace compartido.

 1
Author: Abhra Dey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-13 09:46:40

Empiezo a usar el paquete npm llamado react-html-parser

 0
Author: Dayan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-14 09:24:09