面试题答案
一键面试实现思路
- 响应式数据绑定:Svelte 本身基于响应式原理,当数据发生变化时,与之绑定的视图会自动更新。对于外部数据,可以将其声明为响应式变量。
- $: 语法:使用 Svelte 的
$:
语法来创建派生状态,这些派生状态会在其依赖的响应式数据变化时更新。 onMount
生命周期钩子:如果需要在组件挂载后获取外部数据,可以使用onMount
钩子函数。- Memoization(记忆化):对于一些计算开销较大的操作,可以使用记忆化技术来避免在相同数据下重复计算。例如,可以使用一个对象来缓存计算结果,每次计算前先检查缓存。
关键代码示例
<script>
import { onMount } from'svelte';
// 外部数据,假设通过 API 获取
let externalData;
// 派生状态,依赖外部数据
$: derivedData = externalData? externalData.map(item => item.value * 2) : [];
onMount(() => {
// 模拟异步获取外部数据
setTimeout(() => {
externalData = [
{ value: 1 },
{ value: 2 }
];
}, 1000);
});
</script>
{#if externalData}
<ul>
{#each derivedData as data}
<li>{data}</li>
{/each}
</ul>
{:else}
<p>Loading...</p>
{/if}
在上述代码中:
externalData
模拟从外部获取的数据。derivedData
使用$:
语法创建,依赖于externalData
。当externalData
变化时,derivedData
会自动重新计算。onMount
钩子函数模拟异步获取外部数据的过程。- 视图部分根据
externalData
的加载状态显示不同内容,derivedData
的变化会自动反映在视图中,且避免了不必要的重新渲染,只有当externalData
变化时才会触发derivedData
的重新计算和视图更新。