Les données d'entrée d'un composant sont appelées des _props_, abbréviation de _propriétés_. Vous
pouvez fournir des props aux composants de la même manière que vous passeriez des attributs aux
éléments :
```svelte
```
De l'autre côté, dans `MyComponent.svelte`, les props sont accessibles grâce à la rune `$props`...
```svelte
ce composant est {props.adjective}
```
... bien que plus souvent, il est plus pratique de
[déstructurer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment)
vos props :
```svelte
ce composant est {+++adjective+++}
```
## Valeurs par défaut [!VO]Fallback values
Déstructurer permet de déclarer des valeurs par défaut, qui sont utilisées si le composant parent ne
définit pas une prop donnée (ou si la valeur vaut `undefined`) :
```js
let { adjective = 'content' } = $props();
```
> [!NOTE] Les valeurs par défaut ne sont pas transformées en proxys d'état réactifs (voir [Mise à
> jour des props](#Updating-props) pour plus d'infos).
## Renommer des props [!VO]Renaming props
Vous pouvez aussi utiliser la syntaxe d'assignation par déstructuration pour renommer des props, ce
qui est nécessaire si leur identifiant est invalide ou si c'est un mot-clé réservé par JavaScript,
comme `super` :
```js
let { super: trouper = 'lights are gonna find me' } = $props();
```
## Props de reste [!VO]Rest props
Enfin, nous pouvons utiliser une _propriété de reste_ pour obtenir, eh bien, le reste des props :
```js
let { a, b, c, ...others } = $props();
```
## Mise à jour des props [!VO]Updating props
Les références à une prop à l'intérieur d'un composant se mettent à jour lorque la prop elle-même se
met à jour — lorsque `count` change dans `App.svelte`, elle va également changer dans
`Child.svelte`. Mais le composant enfant est capable d'écraser la valeur de la prop, ce qui peut
être utile pour des états temporaires qui ne seront pas sauvegardés
([démo](/playground/untitled#H4sIAAAAAAAAE6WQ0WrDMAxFf0WIQR0Wmu3VTQJln7HsIfVcZubIxlbGRvC_DzuBraN92qPula50tODZWB1RPi_IX16jLALWSOOUq6P3-_ihLWftNEZ9TVeOWBNHlNhGFYznfqCBzeRdYHh6M_YVzsFNsNs3pdpGd4eBcqPVDMrNxNDBXeSRtXioDgO1zU8ataeZ2RE4Utao924RFXQ9iHXwvoPHKpW1xY4g_Bg0cSVhKS0p560Za95612ZC02ONrD8ZJYdZp_rGQ37ff_mSP86Np2TWZaNNmdcH56P4P67K66_SXoK9pG-5dF5Z9QEAAA==)).
```svelte
```
```svelte
```
Bien que vous puissiez temporairement _réassigner_ des props, vous ne devriez pas _muter_ de props,
à moins qu'elles soient définies comme [bindable]($bindable).
Si une props est un objet classique, la mutation n'aura aucun effet
([démo](/playground/untitled#H4sIAAAAAAAAE3WQwU7DMBBEf2W1QmorQgJXk0RC3PkBwiExG9WQrC17U4Es_ztKUkQp9OjxzM7bjcjtSKjwyfKNp1aLORA4b13ADHszUED1HFE-3eyaBcy-Mw_O5eFAg8xa1wb6T9eWhVgCKiyD9sZJ3XAjZnTWCzzuzfAKvbcjbPJieR2jm_uGy-InweXqtd0baaliBG0nFgW3kBIUNWYo9CGoxE-UsgvIpw2_oc9-LmAPJBCPDJCggqvlVtvdH9puErEMlvVg9HsVtzuoaojzkKKAfRuALVDfk5ZZW0fmy05wXcFdwyktlUs-KIinljTXrRVnm7-kL9dYLVbUAQAA)
:
```svelte
```
```svelte
```
Toutefois, si la props est un proxy réactif, les mutations _auront_ un effet, mais vous aurez un
warning
[`_ownership_invalid_mutation`](runtime-warnings#Client-warnings-ownership_invalid_mutation), car le
composant mute un état qui ne lui "appartient" pas
([démo](/playground/untitled#H4sIAAAAAAAAE3WR0U7DMAxFf8VESBuiauG1WycheOEbKA9p67FA6kSNszJV-XeUZhMw2GN8r-1znUmQ7FGU4pn2UqsOes-SlSGRia3S6ET5Mgk-2OiJBZGdOh6szd0eNcdaIx3-V28NMRI7UYq1awdleVNTzaq3ZmB43CndwXYwPSzyYn4dWxermqJRI4Np3rFlqODasWRcTtAaT1zCHYSbVU3r4nsyrdPMKTUFKDYiE4yfLEoePIbsQpqfy3_nOVMuJIqg0wk1RFg7GOuWfwEbz2wIDLVatR_VtLyBagNTHFIUMCqtoZXeIfAOU1JoUJsR2IC3nWTMjt7GM4yKdyBhlAMpesvhydCC0y_i0ZagHByMh26WzUhXUUxKnpbcVnBfUwhznJnNlac7JkuIURL-2VVfwxflyrWcSQIAAA==))
:
```svelte
```
```svelte
```
La valeur par défaut d'une prop non déclarée avec `$bindable` n'est pas affectée — elle n'est pas
tranformée en proxy réactif d'état — ce qui implique que les mutations ne provoqueront pas de mise à
jour
([démo](/playground/untitled#H4sIAAAAAAAAE3WQwU7DMBBEf2VkIbUVoYFraCIh7vwA4eC4G9Wta1vxpgJZ_nfkBEQp9OjxzOzTRGHlkUQlXpy9G0gq1idCL43ppDrAD84HUYheGwqieo2CP3y2Z0EU3-En79fhRIaz1slA_-nKWSbLQVRiE9SgPTetbVkfvRsYzztttugHd8RiXU6vr-jisbWb8idhN7O3bEQhmN5ZVDyMlIorcOddv_Eufq4AGmJEuG5PilEjQrnRcoV7JCTUuJlGWq7-YHYjs7NwVhmtDnVcrlA3iLmzLLGTAdaB-j736h68Oxv-JM1I0AFjoG1OzPfX023c1nhobUoT39QeKsRzS8owM8DFTG_pE6dcVl70AQAA)) :
```svelte
```
En résumé : ne mutez pas les props. Vous pouvez soit utiliser des props de callback pour communiquer
des changements, ou — si le parent et l'enfant partagent le même objet — utiliser la rune
[`$bindable`]($bindable).
## Typage [!VO]Type safety
Vous pouvez ajouter du typage à vos composants en annotant vos props, comme vous le feriez avec
toute autre déclaration de variable. En TypeScript, cela peut ressembler à ça...
```svelte
```
... tandis qu'en JSDoc vous pouvez écrire ceci :
```svelte
```
Vous pouvez, bien sûr, séparer la déclaration de type de l'annotation :
```svelte
```
> [!NOTE] Les interfaces des éléments natifs du DOM sont fournies par le module `svelte/elements`
> (voir [Typer des composants haut-niveau](typescript#Typing-wrapper-components)).
L'ajout de types est recommandé, car il permet aux personnes utilisant votre composant de découvrir
facilement les props à fournir.
## `$props.id()`
Cette rune, ajoutée dans la version 5.20.0, génère un ID qui est unique à l'instance de composant
courante. Lorsqu'un composant est rendu côté serveur, la valeur de cet ID sera consitente entre le
serveur et le client.
Cela est pratique pour lier des éléments via des attributs comme `for` et `aria-labelledby`.
```svelte
```