Je veux pouvoir transmettre du texte avec des balises HTML, comme ceci:
<MyComponent text="This is <strong>not</strong> working." />
Mais à l'intérieur de MyComponent
la méthode de rendu de 's, quand j'imprime this.props.text
, il imprime littéralement tout:
This is <strong>not</strong> working.
Existe-t-il un moyen pour que React analyse le HTML et le vider correctement?
<MyComponent>This is <strong>not</strong> working</MyComponent>
, au lieu de les passer comme accessoires. Pourriez-vous donner plus de contexte sur ce que vous essayez réellement d'accomplir?Réponses:
Vous pouvez utiliser des tableaux mixtes avec des chaînes et des éléments JSX (voir la documentation ici ):
Il y a un violon ici qui montre que cela fonctionne: http://jsfiddle.net/7s7dee6L/
De plus, en dernier recours, vous avez toujours la possibilité d'insérer du HTML brut, mais soyez prudent car cela peut vous ouvrir à une attaque de script intersite (XSS) si vous ne nettoyez pas les valeurs de propriété.
la source
{text.map( textOrHTML, index) => <span key={index}>{textOrHTML}</span> )}
Bien que ce soit tellement étrange que nous devions le faire en premier lieu entièrement.key="[some unique value]"
l'<strong>
élément.<MyComponent text={<>This is <strong>not</strong> working.</>} />
En fait, il y a plusieurs façons d'y parvenir.
Vous souhaitez utiliser JSX dans vos accessoires
Vous pouvez simplement utiliser {} pour que JSX analyse le paramètre. La seule limitation est la même que pour chaque élément JSX: il ne doit renvoyer qu'un seul élément racine.
La meilleure façon de procéder est de créer une fonction renderMyProp qui retournera des composants JSX (tout comme la fonction de rendu standard), puis d'appeler simplement myProp = {this.renderMyProp ()}
Vous souhaitez transmettre uniquement du HTML sous forme de chaîne
Par défaut, JSX ne vous permet pas de rendre du HTML brut à partir de valeurs de chaîne. Cependant, il existe un moyen de le faire:
Ensuite, dans votre composant, vous pouvez l'utiliser comme ça:
Attention, cette solution «peut» s'ouvrir sur des attaques de falsification de scripts intersites. Méfiez-vous également que vous ne pouvez rendre que du HTML simple, aucune balise ou composant JSX ou d'autres choses sophistiquées.
La manière du tableau
Dans react, vous pouvez passer un tableau d'éléments JSX. Cela signifie:
Je ne recommanderais pas cette méthode car:
La manière des enfants
En l'ajoutant par souci d'exhaustivité, mais en réaction, vous pouvez également obtenir tous les enfants qui sont «à l'intérieur» de votre composant.
Donc, si je prends le code suivant:
Ensuite, les deux divs seront disponibles sous la forme this.props.children dans SomeComponent et pourront être rendus avec la syntaxe standard {}.
Cette solution est parfaite lorsque vous n'avez qu'un seul contenu HTML à transmettre à votre composant (imaginez un composant Popin qui ne prend que le contenu du Popin comme enfant).
Cependant, si vous avez plusieurs contenus, vous ne pouvez pas utiliser d'enfants (ou vous devez au moins le combiner avec une autre solution ici)
la source
this.props.children
. Sans 's' reactjs.org/docs/glossary.html#propschildrenVous pouvez utiliser dangereusementSetInnerHTML
Envoyez simplement le code HTML sous forme de chaîne normale
Et restituer dans le code JSX comme ceci:
Faites juste attention si vous restituez des données saisies par l'utilisateur. Vous pouvez être victime d'une attaque XSS
Voici la documentation: https://facebook.github.io/react/tips/dangerously-set-inner-html.html
la source
puis dans votre composant, vous pouvez faire la vérification des accessoires comme ceci:
Assurez-vous de ne choisir qu'un seul type d'accessoire.
la source
Depuis React v16.02, vous pouvez utiliser un fragment.
Plus d'infos: https://reactjs.org/blog/2017/11/28/react-v16.2.0-fragment-support.html
la source
Pour moi, cela a fonctionné en passant une balise html dans les accessoires enfants
la source
Sur une application de réaction côté client, il existe plusieurs façons de rendre un accessoire sous forme de chaîne avec du HTML. L'un plus sûr que l'autre ...
1 - Définissez le prop comme jsx (ma préférence)
• La seule exigence ici est que quel que soit le fichier qui génère cet accessoire, il doit inclure React en tant que dépendance (au cas où vous générez le jsx de l'accessoire dans un fichier d'assistance, etc.).
2 - Définir dangereusement le innerHtml
• Cette seconde approche est déconseillée. Imaginez un champ d'entrée dont la valeur d'entrée est rendue comme accessoire dans ce composant. Un utilisateur pourrait entrer une balise de script dans l'entrée et le composant qui restitue cette entrée exécuterait ce code potentiellement malveillant. En tant que telle, cette approche a le potentiel d'introduire des vulnérabilités de script intersite. Pour plus d'informations, reportez - vous à la documentation officielle de React
la source
Définissez le type d'accessoire de texte sur any et procédez comme suit:
Exemple
la source
Vous pouvez le faire de 2 manières dont je suis conscient.
1-
<MyComponent text={<p>This is <strong>not</strong> working.</p>} />
Et puis fais ça
Ou deuxième approche, faites-le comme ça
2-
<MyComponent><p>This is <strong>not</strong> working.</p><MyComponent/>
Et puis fais ça
la source
let vhtml = "<p>Test</p>"
et l' ai utilisée sur l'accessoire comme cecitext={vhtml}
et elle est toujours restituée en texte brut pour une raison quelconque.La réponse @matagus me convient, Hope below snippet aide ceux qui souhaitent utiliser une variable à l'intérieur.
la source
Dans mon projet, j'ai dû transmettre un extrait de code HTML dynamique de la variable et le rendre à l'intérieur du composant. J'ai donc fait ce qui suit.
L' objet defaultSelection est passé au composant à partir du
.js
fichierComposant HtmlSnippet
Exemple de Plunkr
réagir doc pour dangerouslySetInnerHTML
la source
Vous pouvez également utiliser une fonction sur le composant pour transmettre jsx à through props. comme:
la source
Oui, vous pouvez le faire en utilisant un tableau de mixage avec des chaînes et des éléments JSX. référence
la source
Analyseur de html-react-parser est une bonne solution. Tu dois juste
appelez-le avec:
et ça marche bien.
la source
Ajout à la réponse: Si vous avez l'intention d'analyser et que vous êtes déjà dans JSX mais que vous avez un objet avec des propriétés imbriquées, une manière très élégante est d'utiliser des parenthèses afin de forcer l'analyse JSX:
la source
Cette question a déjà beaucoup de réponses, mais j'avais fait quelque chose de mal à ce sujet et je pense que cela vaut la peine d'être partagé:
J'avais quelque chose comme ça:
mais le massage était plus long que cela, alors j'ai essayé d'utiliser quelque chose comme ceci:
Il m'a fallu un certain temps pour réaliser que je manquais le () dans l'appel de fonction.
Ca ne fonctionne pas
Travail
peut-être que cela vous aide, comme cela m'a aidé!
la source
Vous pouvez utiliser avec succès les fragments React pour cette tâche. Selon l'utilisation React version que vous, vous pouvez utiliser la syntaxe courte:
<>
ou l'étiquette complète:<React.Fragment>
. Fonctionne particulièrement bien si vous ne souhaitez pas envelopper la chaîne entière dans des balises HTML.la source
Nous pouvons faire la même chose de cette manière.
maintenant vous voulez envoyer ce HTML dans un autre composant dont le nom est le composant Parent.
Appel: -
Utilisation de l'enfant: -
ce travail parfait pour moi.
la source
Ont ajouté le code HTML dans componentDidMount à l'aide de jQuery append. Cela devrait résoudre le problème.
la source