Je construis quelque chose avec React où j'ai besoin d'insérer du HTML avec des variables React dans JSX. Existe-t-il un moyen d'avoir une variable comme ceci:
var thisIsMyCopy = '<p>copy copy copy <strong>strong copy</strong></p>';
et de l'insérer dans réagir comme ça, et ça marche?
render: function() {
return (
<div className="content">{thisIsMyCopy}</div>
);
}
et le faire insérer le HTML comme prévu? Je n'ai rien vu ni entendu parler d'une fonction de réaction qui pourrait faire cela en ligne, ou d'une méthode d'analyse syntaxique qui permettrait à cela de fonctionner.
<head>
?Notez que cela
dangerouslySetInnerHTML
peut être dangereux si vous ne savez pas ce qu'il y a dans la chaîne HTML que vous injectez. En effet, 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 HTML que vous restituez est sûr XSS (cross-site scripting).
Exemple:
la source
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 présente de nombreux inconvénients car il est défini à l'intérieur de la balise.
Je vous suggère d'utiliser un wrapper React comme j'en ai trouvé un ici sur npm à cet effet. html-react-parser fait le même travail.
Très simple :)
la source
En utilisant,
''
vous faites de la chaîne. Utilisez sans virgules inversées, cela fonctionnera bien.la source
Pour éviter les erreurs de linter, je l'utilise comme ceci:
la source
En utilisant '', la valeur est définie sur 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 faire savoir à React qu'il s'agit d'un élément HTML -
''
et cela fonctionnerait<Fragment>
pour renvoyer un élément HTML.la source
thisIsMyCopy
lui-même est JSX, pas une chaîne de HTML. Vous collez donc JSX dans JSX.Si quelqu'un d'autre atterrit encore ici. Avec ES6, vous pouvez créer votre variable html comme ceci:
la source
{}
et la chaîne entière dans un balisage comme ça(<span>{telephoneNumber} <br /> {email}</span>)
<p>copy copy copy <strong>strong copy</strong></p>
est une chaîne. Vous l'avez en tant que JSX.Vous pouvez également inclure ce code HTML dans ReactDOM comme ceci:
Voici deux liens link et link2 de la documentation React qui pourraient être utiles.
la source