--- 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{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}