Les composants, ou en anglais "components", sont une des fonctionnalités les plus importantes de React. Ils permettent de découper l’interface utilisateur en éléments indépendants et réutilisables.
Fonction
Une fonction retournant le code HTML de la composante doit premièrement être créée.
Par exemple, avec une fonction JavaScript de base (fonction composant):
function Blue(props) {
return <div className="blue">{props.children}</div>;
}
ou en étendant une classe ES6 React:
class Blue extends React.Component {
render() {
return <div className="blue">{this.props.children}</div>;
}
}
Ces deux approches sont équivalentes du point de vue de React.
Simplification
Si un composant utilise peu de propriétés dans ses props, il est possible de déstructurer son paramètre dans le cadre d'une fonction composant.
Le code précédent pourrait-être réécris ainsi:
function Blue({children}) {
return <div className="blue">{children}</div>;
}
Indiquant qu'un objet est passé en paramètre (props) et que seule sa propriété children
est nécessaire. Donc la référence à props est retirée, permettant ainsi de simplifier l'accès à la valeur de children
.
Utilisation
Pour utiliser une composante, il faut ensuite l'appeler. soit directement avec l'API de React:
const element = React.createElement(Blue, {children: 'Marshall Mathers'})
Ou encore plus simplement en JSX:
const element = <Blue>Marshall Mathers</Blue>
Par défaut, le contenu se trouvant entre deux balises d'un composant React est attribué comme valeur à la propriété children
. D'où pourquoi ces deux codes sont équivalents.
Attributs
Il est possible de spécifier des propriétés supplémentaires en les définissant comme attribut sur un composant React.
Par exemple, plutôt que d'utiliser la propriété children
, il est possible de créer une propriété intitulée text
et d'utiliser celle-ci à la place:
Réutilisation & imbrication
Une fois définis, des composants React peuvent être réutilisés ou imbriqués à volonté sans problème. Ce qui les rends très flexibles et puissants.
Par exemple:
const element = (
<Blue>Marshall Mathers</Blue>
<Blue>Eminem</Blue>
<Blue>Slim Shady</Blue>
)
Ou encore:
const element = (
<Blue>
Marshall Mathers
<Blue>Eminem</Blue>
</Blue>
)
Sont tout à fait valides.