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)
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)
});
¿Hay alguna manera fácil de convertir esto en html? ¿Cómo debo hacerlo usando ReactJS?
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.
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
-
Más fácil - Use Unicode, guarde el archivo como UTF-8 y establezca el
charset
en UTF-8.<div>{'First · Second'}</div>
-
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>
-
O una matriz mixta con cadenas y elementos JSX.
<div>{['First ', <span>·</span>, ' Second']}</div>
-
Last Resort - Insertar HTML raw usando
dangerouslySetInnerHTML
.<div dangerouslySetInnerHTML={{__html: 'First · Second'}} />
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
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
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.
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
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