{#each ...}
{#each expression as name}...{/each}{#each expression as name, index}...{/each}遍历值可以通过 each 块来完成。这些值可以是数组、类数组对象(即任何具有 length 属性的对象),或者可迭代对象如 Map 和 Set —— 换句话说,任何可以用 Array.from 处理的对象都可以。
<h1>购物清单</h1>
<ul>
{#each items as item}
<li>{item.name} x {item.qty}</li>
{/each}
</ul>each 块还可以指定一个 index,相当于 array.map(...) 回调中的第二个参数:
{#each items as item, i}
<li>{i + 1}: {item.name} x {item.qty}</li>
{/each}带键的 each 块
{#each expression as name (key)}...{/each}{#each expression as name, index (key)}...{/each}如果提供了一个 key 表达式(必须能唯一标识每个列表项),当数据发生变化时,Svelte 将使用它对列表进行差异比较,而不是在末尾添加或删除条目。key 可以是任何对象,但建议使用字符串和数字,因为它们允许在对象本身发生变化时保持标识继续存在。
{#each items as item (item.id)}
<li>{item.name} x {item.qty}</li>
{/each}
<!-- 或带有额外的索引值 -->
{#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 块
{#each expression}...{/each}{#each expression, index}...{/each}如果你只是想渲染某些内容 n 次,可以省略 as 部分(demo):
<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>今天没有任务!</p>
{/each}上一页 下一页