Je construis quelque chose avec React où je dois insérer du HTML avec des variables de React dans JSX. Y a-t-il un moyen d'avoir une variable comme celle-ci:
var thisIsMyCopy = '<p>copy copy copy <strong>strong copy</strong></p>';
et pour l'insérer dans réagir comme tel, et le faire fonctionner?
render: function() {
return (
<div className="content">{thisIsMyCopy}</div>
);
}
et le faire insérer le code HTML comme prévu? Je n'ai jamais vu ni entendu parler d'une fonction de réaction qui pourrait faire cela en ligne, ou d'une méthode d'analyse de choses qui permettrait que cela fonctionne.
Vous pouvez utiliser dangereusementSetInnerHTML , par exemple.
render: function() {
return (
<div className="content" dangerouslySetInnerHTML={{__html: thisIsMyCopy}}></div>
);
}
Notez que dangerouslySetInnerHTML
peut être dangereux si vous ne savez pas ce que contient la chaîne HTML que vous injectez. Cela est dû au fait que du code côté client malveillant peut être injecté via des balises de script.
C'est probablement une bonne idée de nettoyer la chaîne HTML via un utilitaire tel que DOMPurify si vous n'êtes pas sûr à 100% que le code HTML que vous restituez est sécurisé XSS (script intersite).
Exemple:
import DOMPurify from 'dompurify'
const thisIsMyCopy = '<p>copy copy copy <strong>strong copy</strong></p>';
render: function() {
return (
<div className="content" dangerouslySetInnerHTML={{__html: DOMPurify.sanitize(thisIsMyCopy)}}></div>
);
}
Pour éviter les erreurs de linter, je l’utilise comme ceci:
render() {
const props = {
dangerouslySetInnerHTML: { __html: '<br/>' },
};
return (
<div {...props}></div>
);
}
En utilisant ''
, vous le transformez en chaîne. Utilisez sans guillemets, cela fonctionnera bien.
import { Fragment } from 'react' // react version > 16.0
var thisIsMyCopy = (
<Fragment>
<p>copy copy copy
<strong>strong copy</strong>
</p>
</Fragment>
)
En utilisant '' the, la valeur devient une chaîne et React n'a aucun moyen de savoir qu'il s'agit d'un élément HTML. Vous pouvez faire ce qui suit pour que React sache qu’il s’agit d’un élément HTML -
''
et cela fonctionnerait<Fragment>
pour renvoyer un élément HTML.