--- title: Les blocs logiques --- ## {#if ...} ```svelte {#if expression}...{/if} ``` ```svelte {#if expression}...{:else if expression}...{/if} ``` ```svelte {#if expression}...{:else}...{/if} ``` Il est possible d'afficher conditionnellement du contenu en l'encadrant par un bloc `if`. ```svelte {#if answer === 42}

c'était quoi la question déjà ?

{/if} ``` Des conditions supplémentaires peuvent être ajoutées avec `{:else if expression}`, et il est possible de terminer avec un `{:else}` optionnel. ```svelte {#if soupe.temperature > 100}

trop chaud !

{:else if 80 > soupe.temperature}

trop froid !

{:else}

parfait !

{/if} ``` (Les blocs n'ont pas besoin d'entourer des éléments, ils peuvent aussi entourer du texte au sein d'éléments !) ## {#each ...} ```svelte {#each expression as name}...{/each} ``` ```svelte {#each expression as name, index}...{/each} ``` ```svelte {#each expression as name (key)}...{/each} ``` ```svelte {#each expression as name, index (key)}...{/each} ``` ```svelte {#each expression as name}...{:else}...{/each} ``` Il est possible d'itérer sur des listes de valeurs avec un bloc `each`. ```svelte

Liste de courses

``` Vous pouvez utiliser des blocs `each` pour itérer sur n'importe quel tableau ou valeur similaire — c'est-à-dire un objet avec une propriété `length`. Un bloc `each` peut aussi spécifier un _indice_, équivalent au deuxième argument du [callback](/docs/development#callback) de `array.map(...)`: ```svelte {#each items as item, i}
  • {i + 1}: {item.name} x {item.qty}
  • {/each} ``` Vous pouvez spécifier une _clé_ à un bloc `each`. Cette clé doit identifier de manière unique chaque élément de la liste. Svelte s'en servira pour mettre à jour la liste avec précision lorsque la donnée changera, plutôt que d'ajouter ou enlever des éléments à la fin. La clé peut être n'importe quel objet, mais les chaînes de caractères ou les nombres sont recommandés car ils permettent de persister l'identité, ce qui n'est pas le cas des objets. ```svelte {#each items as item (item.id)}
  • {item.name} x {item.qty}
  • {/each} {#each items as item, i (item.id)}
  • {i + 1}: {item.name} x {item.qty}
  • {/each} ``` Vous pouvez librement utiliser la syntaxe de [décomposition](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment) dans les blocs `each`. ```svelte {#each items as { id, name, qty }, i (id)}
  • {i + 1}: {name} x {qty}
  • {/each} {#each objects as { id, ...rest }}
  • {id}
  • {/each} {#each items as [id, ...rest]}
  • {id}
  • {/each} ``` Un bloc `each` peut aussi avoir une clause `{:else}`, qui sera affichée si la liste est vide. ```svelte {#each todos as todo}

    {todo.text}

    {:else}

    Rien à faire aujourd'hui !

    {/each} ``` Depuis Svelte 4, il est possible d'itérer sur les itérables comme `Map` ou `Set`. Les itérables doivent êtres finis et statiques (ils ne doivent pas changer lorsqu'on itère dessus). Sous le capot, ils sont transformés en tableau avec `Array.from` avant d'être envoyés au rendu. Si vous écrivez du code sensible à la performance, essayez d'éviter les itérables et utilisez plutôt des tableaux classiques, qui sont plus performants dans ce cas. ## {#await ...} ```svelte {#await expression}...{:then name}...{:catch name}...{/await} ``` ```svelte {#await expression}...{:then name}...{/await} ``` ```svelte {#await expression then name}...{/await} ``` ```svelte {#await expression catch name}...{/await} ``` Les blocs `await` permettent de différencier les trois états de promesse possibles — en attente, résolue ou rejetée. En mode [SSR](/docs/web#server-side-rendering), seul l'état d'attente sera rendu sur le serveur. ```svelte {#await promise}

    en attente de la résolution de la promesse...

    {:then value}

    La valeur est {value}

    {:catch error}

    Quelque chose ne va pas : {error.message}

    {/await} ``` Le bloc `catch` peut être ignoré si vous n'avez pas besoin d'afficher quoi que ce soit lorsque la promesse est rejetée (ou si aucune erreur n'est possible). ```svelte {#await promise}

    en attente de la résolution de la promesse...

    {:then value}

    La valeur est {value}

    {/await} ``` Si l'état d'attente ne vous concerne pas, vous pouvez aussi ignorer le bloc initial. ```svelte {#await promise then value}

    La valeur est {value}

    {/await} ``` De manière similaire, si vous voulez uniquement afficher l'état d'erreur, vous pouvez ignorer le bloc `then`. ```svelte {#await promise catch error}

    L'erreur est {error}

    {/await} ``` ## {#key ...} ```svelte {#key expression}...{/key} ``` Les blocs `key` détruisent et reconstruisent leur contenu quand la valeur de leur expression change. C'est utile lorsque vous voulez qu'un élément joue sa transition à chaque fois qu'une valeur se met à jour. ```svelte {#key value}
    {value}
    {/key} ``` Utilisé autour de composants, un bloc `key` déclenchera leur réinstantiation et réinitialisation. ```svelte {#key value} {/key} ```