J'ai une valeur de balise HTML dans ma variable d'état comme
render() { return( <div>{this.props.value}</div> ) }
Je souhaite afficher ce contenu HTML dans mon composant enfant. J'essaie de faire comme
<Childcomponent value={this.state.value} />
Pour pouvoir utiliser les accessoires
pour accéder à la valeur à l'intérieur du composant enfant.
Mon composant enfant est
this.state = { value: '<p>This is a paragraph</p>' }
Mais cela produit des erreurs. Comment puis-je réparer cela? N 'y a-t-il pas une autre solution? Merci d'avance.
4 Réponses :
vous devriez utiliser jsx pour cela,
<Childcomponent value={someHtml} />
puis le passer à votre composant enfant comme accessoire comme celui-ci (le type de prop est node)
const someHtml = (<p>This is a paragraph</p>)
Je règle dynamiquement la valeur de l'état. Comment puis je faire ça?
vous pouvez également utiliser l'état pour créer le code HTML comme so const someHtml = (
{this.state.value}
)
Dans la console du composant parent quand j'obtiens comme Ceci est le paragraphe {$$ typeof: Symbol (react.element), tapez: format 'p'}
j'obtiens correctement le composant enfant. Mais quand j'obtiens la console avec du HTML pur comme
j'obtiens l'erreur.
Je ne recommanderais pas de le faire, mais si vous savez ce que vous faites, vous pouvez utiliser dangerouslySetInnerHTML
prop.
Donc, votre ChildComponent devrait être quelque chose comme
function ChildComponent(props) { return <div dangerouslySetInnerHTML={props.value} /> }
Mais, comme je l'ai dit, je ne recommande pas de le faire, car il peut être vulnérable aux attaques XSS. Vous pouvez trouver plus d'informations dans React Docs
Dans la console du composant parent quand j'obtiens comme Ceci est le paragraphe {$$ typeof: Symbol (react.element), tapez: format 'p'}
j'obtiens correctement le composant enfant. Mais quand j'obtiens la console avec du HTML pur comme
j'obtiens l'erreur.
Existe-t-il une méthode pour modifier l'élément HTML pour réagir? Quand j'ai défini l'état que j'obtiens uniquement en HTML
Je ne comprends pas vraiment ce que tu veux dire. Pouvez-vous décrire votre cas d'utilisation? Je ne sais pas ce que vous essayez d'accomplir en passant du HTML comme accessoire. Habituellement, vous ne définissez pas l'état sur html, vous avez plutôt html comme composant et lui transmettez des données, comme la réponse d'Eliran. sans comprendre ce que vous essayez d'accomplir, il est difficile de donner une réponse correcte, mais cette réponse fait exactement ce que vous demandez dans la question
Le mien est une fonctionnalité glisser-déposer. Lorsque je fais glisser et déposer un texte ou un paragraphe, je veux simplement envoyer ce
au composant enfant qui remplit la zone déposée.
Je ne peux pas vous dire tous les détails sur la façon de l'implémenter dans un commentaire ici, mais vous ne devriez certainement pas transmettre d'éléments html en tant que valeurs de chaîne dans ce cas d'utilisation. Ce que vous pouvez faire est d'avoir des composants qui sont déplaçables et basés sur des événements de glisser-déposer pour les enregistrer dans l'état (pas une chaîne, mais le composant lui-même). Plus tard, vous pouvez utiliser cette valeur d'état pour rendre ce composant. Vous pouvez rechercher sur Internet pour réagir par glisser-déposer, il existe même une bibliothèque pour cela
Je pense que l'approche est erronée ici.
Premièrement, l'état doit être réservé aux valeurs qui changent ou aux données provenant d'une API. Je ne dirais pas qu'un extrait de code html devrait faire partie d'un état d'application.
Eliran suggère une approche, mais là encore, le composant enfant attend un accessoire appelé value.
Il y a aussi une autre façon, qui est «enfants» où vous pouvez injecter en html sur un composant enfant.
Par exemple
const ChildComponent= (props) => { return ( <div> <p>{props.value}</p> {props.children} </div> ) }
et dans le composant lui-même .. ..
<Childcomponent value={somePropToPassDown}> <p>This is a paragraph</p> </ChildComponent>
Lisez cet article sur React Children ce qui explique plus en détail
Ne définissez pas la valeur en tant que chaîne à la place, vous pouvez définir la valeur en enveloppant dynamiquement le texte avec un élément html.
constructor(props) { super(props); this.state = { value: '' } } componentDidMount = async () => { this.setState({ value: <p>This is a paragraph</p> }) }
De cette façon, vous pouvez définir et rendre l'élément html dynamiquement.
Vous pouvez également utiliser du code HTML interne dangereusement défini. Voici le lien pour la référence, https: // zhenyong. github.io/react/tips/dangerously-set-inner-html.html .
À quelle erreur faites-vous face?
Violation invariante: les objets ne sont pas valides en tant qu'enfant React
Afficher le code
Childcomponent
Double possible de Reactjs convertir en html
@ssk Veuillez vérifier les modifications