面试题答案
一键面试实现思路
- 响应式数据传递:在Svelte中,数据默认是响应式的。当A组件中的数组数据变化时,会自动触发B组件的更新,因为B组件依赖于A组件传递的数组。同理,B组件更新后也会触发C组件的更新。
- 避免不必要的重新渲染:使用Svelte的
$:
语句和{#if}
块来控制渲染逻辑。可以在B组件中计算出需要传递给C组件的数据,只有当这个计算数据发生变化时,才触发C组件的重新渲染。另外,使用key
绑定可以帮助Svelte更高效地更新DOM。
关键代码示例
- A组件(App.svelte)
<script>
import B from './B.svelte';
let dataArray = [1, 2, 3];
function updateData() {
dataArray = [4, 5, 6];
}
</script>
<button on:click={updateData}>更新数据</button>
<B {dataArray}/>
- B组件(B.svelte)
<script>
import C from './C.svelte';
export let dataArray;
let processedData;
$: processedData = dataArray.map(item => item * 2);
</script>
<C {processedData}/>
- C组件(C.svelte)
<script>
export let processedData;
</script>
<ul>
{#each processedData as item (item)}
<li>{item}</li>
{/each}
</ul>
在上述代码中,A组件通过 dataArray
传递数据给B组件。B组件使用 $:
计算出 processedData
,只有当 dataArray
变化导致 processedData
变化时,才会触发C组件更新。C组件使用 {#each}
块展示数据,并通过 (item)
作为 key
来优化渲染。