Menu

Props React : passer des données aux composants

Les props sont les entrées d'un composant React : des valeurs qu'un parent passe à un enfant sous forme d'attributs JSX. Apprenez à passer et déstructurer des props, définir des valeurs par défaut, passer des fonctions, décomposer des props, et pourquoi les props sont en lecture seule.

Cette page contient des éditeurs exécutables - modifiez, exécutez et voyez la sortie instantanément.

Les props sont les entrées d'un composant React. Un parent les passe sous forme d'attributs dans le JSX, <UserCard name="Ada" online={true} />, et l'enfant les reçoit dans un seul objet, que vous déstructurez en général dans les paramètres de la fonction. Les props permettent à un même composant d'afficher des données différentes à chaque utilisation.

Le même UserCard affiche trois personnes différentes. Regardez la dernière : un attribut sans valeur, online, signifie online={true}. Ajoutez une quatrième carte avec votre nom et votre rôle.

Passer et lire des props

Passez une chaîne entre guillemets et toute autre valeur entre accolades : nombres, booléens, tableaux, objets, fonctions, et même du JSX.

<Product
    title="Desk lamp"
    price={39.5}
    inStock={false}
    tags={['light', 'office']}
    seller={{ name: 'Lumen', rating: 4.8 }}
/>

React rassemble tous les attributs dans un objet et le passe comme premier argument du composant. Vous pouvez le lire sous le nom props, ou extraire directement dans la liste des paramètres les champs dont vous avez besoin :

function Product(props) {
    return <h3>{props.title}</h3>;
}

function Product({ title, price, seller }) {
    return <h3>{title}, ${price} from {seller.name}</h3>;
}

Les deux versions reçoivent le même objet. La déstructuration est le style courant, car la signature de la fonction indique alors exactement quelles props le composant utilise.

Valeurs par défaut

Donnez une valeur par défaut à une prop avec la valeur par défaut de déstructuration de JavaScript, = value. Elle s'applique quand le parent omet la prop ou passe undefined. Elle ne s'applique pas à null, 0, false ou '', qui sont de vraies valeurs.

Les trois premiers boutons reprennent leurs valeurs par défaut là où une prop est absente ou vaut undefined. Le dernier passe null, donc size vaut vraiment null, et la recherche ne trouve aucun padding. Remplacez size={null} par size="small" pour corriger.

L'ancien code définit les valeurs par défaut avec une propriété statique, Button.defaultProps = { size: 'medium' }. React 19 a supprimé defaultProps pour les composants fonctions : le JSX l'ignore sur une fonction, sans avertissement. Il fonctionne toujours sur les composants classes. Utilisez les valeurs par défaut de déstructuration.

Passer des fonctions en props

Les données descendent : un parent passe des props à ses enfants, jamais l'inverse. Quand un enfant doit signaler au parent qu'il s'est passé quelque chose, le parent passe une fonction, et l'enfant l'appelle. Par convention, ces props s'appellent onSomething.

Rating ne stocke rien. Il affiche la value qu'il reçoit et signale les clics par onRate. L'état vit dans App, qui le redescend. Passez directement onRate={setRating} au lieu de handleRate et cela fonctionne encore : un setter est aussi une fonction. Déplacer ainsi l'état dans un parent commun s'appelle faire remonter l'état.

Décomposer des props

Quand vous avez déjà un objet dont les clés correspondent aux props d'un composant, décomposez-le avec {...object} au lieu d'écrire chaque attribut. La syntaxe du reste fait l'inverse dans la liste des paramètres : prendre quelques props par leur nom, regrouper tout le reste, et le transmettre.

Le second avatar décompose person puis définit color : quand la même prop apparaît deux fois, la dernière l'emporte, placez donc les remplacements après la décomposition. TextField garde label pour lui et passe type, placeholder et maxLength directement à l'<input>. Utilisez la décomposition pour des enveloppes comme celle-ci ; ailleurs, lister les props explicitement permet de mieux voir ce qu'un composant reçoit.

Les props sont en lecture seule

Un composant ne doit jamais modifier ses propres props. Elles appartiennent au parent, et le même objet peut être partagé. Traitez-les comme des arguments de fonction que vous n'avez pas le droit de réaffecter :

function Counter({ count }) {
    count = count + 1; // wrong: changes a local copy, the parent never sees it
    return <p>{count}</p>;
}

function Profile(props) {
    props.name = 'Someone else'; // wrong: in development React freezes props, so this throws a TypeError
    return <p>{props.name}</p>;
}

Les props changent quand même au fil du temps. Quand le parent refait un rendu avec de nouvelles valeurs, l'enfant reçoit un nouvel objet props et fait son rendu avec :

Temperature ne modifie jamais celsius. Il en calcule fahrenheit à chaque rendu. Faites glisser le curseur et l'état du parent change, donc l'enfant reçoit une nouvelle prop. Si un enfant a besoin d'une valeur qu'il peut modifier lui-même, cette valeur est un état, pas une prop.

Props et état

Les props et l'état sont tous deux de simples valeurs JavaScript qui influencent ce qu'un composant affiche, et un changement de l'un ou de l'autre déclenche un nouveau rendu du composant. La différence tient à qui possède la valeur.

PropsÉtat
ProvenanceLe parent, sous forme d'attributs JSXLe composant lui-même, via useState ou useReducer
Le composant peut-il la modifierNon, elle est en lecture seuleOui, par son setter
Usage typiqueConfigurer un composant : un libellé, une taille, les données à afficherMémoriser quelque chose qui change : le texte d'un champ, un menu ouvert

La même valeur est souvent les deux. Dans l'exemple de température ci-dessus, celsius est un état dans App et une prop dans Temperature. Le propriétaire la garde comme état et la passe vers le bas comme prop, avec une fonction pour la modifier quand un enfant en a besoin.

Une prop peut contenir n'importe quelle valeur, y compris du JSX et des composants. Passer un élément comme icon={<StarIcon />} permet à un parent de remplir un emplacement dans un enfant, la même idée que children avec le nom de votre choix.

La prop children

Tout ce que vous placez entre les balises ouvrante et fermante d'un composant arrive dans une prop nommée children. C'est ainsi que l'on construit des enveloppes comme des cartes, des panneaux et des mises en page qui ne connaissent pas leur contenu à l'avance :

La page sur children explique comment passer plusieurs emplacements et manipuler children sans risque.

Les keys ne sont pas des props

key ressemble à un attribut, mais React le garde pour lui afin d'associer les éléments d'une liste d'un rendu à l'autre. Le composant ne le reçoit jamais :

La console affiche props.key à undefined et props.id avec la vraie valeur. Quand un enfant a besoin de l'identifiant, passez-le une seconde fois sous un autre nom, comme id ici. Un build de développement avertit aussi quand vous lisez props.key ; l'aperçu fonctionne comme un build de production, vous voyez donc seulement le undefined.

Questions fréquentes

Que sont les props dans React ?

Les props (abréviation de properties) sont les arguments d'un composant. Un parent les passe sous forme d'attributs JSX, <Avatar size={48} />, et l'enfant les reçoit dans un seul objet, en général déstructuré : function Avatar({ size }).

Comment définir une valeur par défaut pour une prop ?

Utilisez une valeur par défaut de déstructuration : function Button({ size = 'medium' }). Elle s'applique quand la prop est absente ou vaut undefined. React 19 a supprimé defaultProps pour les composants fonctions ; les composants classes le gèrent toujours.

Un composant enfant peut-il modifier ses props ?

Non. Les props sont en lecture seule. Pour changer ce qu'un enfant affiche, le parent passe de nouvelles props ; pour permettre à l'enfant de demander un changement, le parent passe une fonction comme onChange et l'enfant l'appelle.

Quelle est la différence entre props et état ?

Les props viennent du parent et l'enfant ne peut pas les modifier. L'état appartient au composant lui-même et change par son setter. Une valeur est souvent un état dans un parent et une prop dans ses enfants.

Pourquoi props.key vaut-il undefined ?

key (comme ref dans les anciennes versions de React) sert à React lui-même pour suivre les éléments d'une liste et n'est pas transmis au composant. Si l'enfant a besoin de la valeur, passez-la une seconde fois sous un autre nom, par exemple <Row key={id} id={id} />.

Illustration des langages de programmation de Coddy

Apprendre à coder avec Coddy

COMMENCER