Estoy creando algo con React donde necesito insertar HTML con React Variables en JSX. ¿Hay alguna manera de tener una variable como esta?
var thisIsMyCopy = '<p>copy copy copy <strong>strong copy</strong></p>';
e insertarlo en reaccionar así, ¿y hacer que funcione?
render: function() {
return (
<div className="content">{thisIsMyCopy}</div>
);
}
y tiene que insertar el HTML como se esperaba? No he visto ni escuchado nada acerca de una función de reacción que pueda hacer esto en línea, o un método de analizar cosas que permitan que esto funcione.
<head>
?Tenga en cuenta que
dangerouslySetInnerHTML
puede ser peligroso si no sabe qué hay en la cadena HTML que está inyectando.Esto se debe a que el código malicioso del lado del cliente se puede inyectar a través de etiquetas de script.Probablemente sea una buena idea desinfectar la cadena HTML a través de una utilidad como DOMPurify si no está 100% seguro de que el HTML que está renderizando es seguro XSS (cross-site scripting).
Ejemplo:
fuente
import DOMPurify from 'dompurify' const thisIsMyCopy = '<Alert severity="warning">copy copy copy <strong>strong copy</strong></Alert >'; render: function() { return ( <div className="content" dangerouslySetInnerHTML={{__html: DOMPurify.sanitize(thisIsMyCopy)}}></div> ); }
dangerouslySetInnerHTML tiene muchas desventajas porque se establece dentro de la etiqueta.
Le sugiero que use un contenedor de reacción como encontré uno aquí en npm para este propósito. html-react-parser hace el mismo trabajo.
Muy simple :)
fuente
Al usarlo
''
lo estás haciendo en cadena. Usar sin comillas invertidas funcionará bien.fuente
Para evitar errores de linter, lo uso así:
fuente
Al usar '', establece el valor en una cadena y React no tiene forma de saber que es un elemento HTML. Puede hacer lo siguiente para que React sepa que es un elemento HTML:
''
y funcionaría<Fragment>
para devolver un elemento HTML.fuente
thisIsMyCopy
sí mismo es JSX, no una cadena de HTML. Así que literalmente estás pegando JSX en JSX.Si alguien más todavía aterriza aquí. Con ES6 puede crear su variable html de esta manera:
fuente
{}
y toda la cadena en un marcado como tal(<span>{telephoneNumber} <br /> {email}</span>)
<p>copy copy copy <strong>strong copy</strong></p>
hay una cadena. Lo tienes como JSX.También puede incluir este HTML en ReactDOM de esta manera:
Aquí hay dos enlaces link y link2 de la documentación de React que podrían ser útiles.
fuente