Étant un débutant dans le monde React, je veux comprendre en profondeur ce qui se passe lorsque j'utilise {this.props.children}
et quelles sont les situations pour utiliser la même chose. Quelle est la pertinence de celui-ci dans l'extrait de code ci-dessous?
render() {
if (this.props.appLoaded) {
return (
<div>
<Header
appName={this.props.appName}
currentUser={this.props.currentUser}
/>
{this.props.children}
</div>
);
}
}
Qu'est-ce que "les enfants"?
La documentation React indique que vous pouvez utiliser
props.children
sur les composants qui représentent des "boîtes génériques" et qui ne connaissent pas leurs enfants à l’avance. Pour moi, cela n’a pas vraiment éclairci les choses. Je suis sûr que pour certains, cette définition est parfaitement logique, mais elle ne l’a pas été pour moi.Mon explication simple de ce que
this.props.children
fait est que , il est utilisé pour afficher tout ce que vous incluez entre les balises d’ouverture et de fermeture lors de l’appel d’un composant.Un exemple simple:
Voici un exemple de fonction sans état utilisée pour créer un composant. Encore une fois, puisqu'il s'agit d'une fonction, il n'y a pas de mot clé
this
, utilisez donc simplementprops.children
const Picture = (props) => {
return (
<div>
<img src={props.src}/>
{props.children}
</div>
)
}
Ce composant contient un
<img>
qui reçoit un certainprops
, puis il affiche{props.children}
.Chaque fois que ce composant est appelé,
{props.children}
s'affiche également. Il ne s'agit que d'une référence à ce qui se trouve entre les balises d'ouverture et de fermeture du composant.
//App.js
render () {
return (
<div className='container'>
<Picture key={picture.id} src={picture.src}>
//what is placed here is passed as props.children
</Picture>
</div>
)
}
Au lieu d'appeler le composant avec une balise à fermeture automatique
<Picture />
si vous l'appelez, les balises d'ouverture et de fermeture complètes<Picture> </Picture>
vous permettront de placer davantage de code entre elles.Cela dissocie le composant
<Picture>
de son contenu et le rend plus réutilisable.
Référence: ne introduction rapide aux props.children de React
Je suppose que vous voyez ceci dans la méthode render
d'un composant React, comme ceci (edit: votre question modifiée montre bien cela) :
class Example extends React.Component {
render() {
return <div>
<div>Children ({this.props.children.length}):</div>
{this.props.children}
</div>;
}
}
class Widget extends React.Component {
render() {
return <div>
<div>First <code>Example</code>:</div>
<Example>
<div>1</div>
<div>2</div>
<div>3</div>
</Example>
<div>Second <code>Example</code> with different children:</div>
<Example>
<div>A</div>
<div>B</div>
</Example>
</div>;
}
}
ReactDOM.render(
<Widget/>,
document.getElementById("root")
);
<div id="root"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
children
est une propriété spéciale de React components qui contient tous les éléments enfants définis dans le composant, par exemple. divs
à l'intérieur de Example
ci-dessus. {this.props.children}
inclut ces enfants dans le résultat rendu.
... quelles sont les situations pour utiliser la même chose
Vous le feriez lorsque vous souhaitez inclure les éléments enfants dans la sortie rendue directement, sans modification. et pas si vous ne l'avez pas fait.