MST

星途 面试题库

面试题:Svelte模板语法中如何处理列表渲染及响应式更新

给定一个数组`items = [1, 2, 3, 4]`,在Svelte模板中使用`each`块渲染这个数组中的每个元素。并且添加一个按钮,点击按钮可以向数组中添加一个新元素(比如`5`),同时要保证视图能正确响应式更新。请实现这个功能并解释Svelte在列表渲染和响应式更新背后的原理。
24.6万 热度难度
前端开发Svelte

知识考点

AI 面试

面试题答案

一键面试

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 列表渲染和响应式更新原理

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