{#each ...}
{#each expression as name}...{/each}{#each expression as name, index}...{/each}値の反復処理は、each ブロックで行うことができます。対象の値は、配列、配列のようなオブジェクト(つまり、length プロパティを持つもの)、または Map や Set などの反復可能なオブジェクト、言い換えると Array.from で使用できるものであれば何でもかまいません。
<h1>Shopping list</h1>
<ul>
{#each items as item}
<li>{item.name} x {item.qty}</li>
{/each}
</ul>任意の配列や配列のような値を反復処理するために each ブロックを使用できます。つまり、length プロパティを持つ任意のオブジェクトを使用できます。
各ブロックでは、array.map(...) コールバックの 2 番目の引数に相当する インデックス も指定できます。
{#each items as item, i}
<li>{i + 1}: {item.name} x {item.qty}</li>
{/each}キー付き各ブロック
{#each expression as name (key)}...{/each}{#each expression as name, index (key)}...{/each}キー式が提供されている場合(各リストアイテムを一意に識別する必要があります)、データが変更されたときに Svelte はアイテムを最後に追加または削除するのではなく、それを使用してリストを比較します。キーは任意のオブジェクトにすることができますが、オブジェクト自体が変更されても同一性が保持されるため、文字列と数値をお勧めします。
{#each items as item (item.id)}
<li>{item.name} x {item.qty}</li>
{/each}
<!-- or with additional index value -->
{#each items as item, i (item.id)}
<li>{i + 1}: {item.name} x {item.qty}</li>
{/each}each ブロックでは、デストラクチャリングとレストパターンを自由に使用できます。
{#each items as { id, name, qty }, i (id)}
<li>{i + 1}: {name} x {qty}</li>
{/each}
{#each objects as { id, ...rest }}
<li><span>{id}</span><MyComponent {...rest} /></li>
{/each}
{#each items as [id, ...rest]}
<li><span>{id}</span><MyComponent values={rest} /></li>
{/each}アイテムなしの各ブロック
{#each expression}...{/each}{#each expression, index}...{/each}何かを n 回レンダリングしたいだけの場合は、as 部分を省略できます (<div class="chess-board">
{#each { length: 8 }, rank}
{#each { length: 8 }, file}
<div class:black={(rank + file) % 2 === 1}></div>
{/each}
{/each}
</div>
Else ブロック
{#each expression as name}...{:else}...{/each}each ブロックは、リストが空の場合にレンダリングされる {:else} 句も持つことができます。
{#each todos as todo}
<p>{todo.text}</p>
{:else}
<p>No tasks today!</p>
{/each}前 次