Svelte 实现代码
<script>
let items = [1, 2, 3, 4];
const addItem = () => {
items = [...items, 5];
};
</script>
<button on:click={addItem}>添加元素</button>
<ul>
{#each items as item}
<li>{item}</li>
{/each}
</ul>
Svelte 列表渲染和响应式更新原理
- 列表渲染原理:
- 在Svelte中,
each
块用于迭代数组或对象。它会为数组中的每个元素创建相应的DOM节点。在上述代码中,{#each items as item}
会遍历items
数组,为每个item
创建一个<li>
元素。Svelte会跟踪数组元素的变化,包括添加、删除或移动元素。
- 响应式更新原理:
- Svelte使用一种称为“细粒度响应式系统”。当数据发生变化时,Svelte不会重新渲染整个组件,而是精确地更新受影响的DOM部分。
- 在代码中,当点击按钮调用
addItem
函数时,通过items = [...items, 5]
创建了一个新的数组。Svelte检测到items
变量引用的变化,因为Svelte会对变量的赋值操作进行跟踪。然后,它会重新运行each
块,根据新的数组更新DOM,添加新的<li>
元素来显示新添加的元素5
。这种细粒度的更新策略使得Svelte在性能上表现出色,尤其是在处理大型列表时。