面试题答案
一键面试1. 组件销毁时清理资源防止内存泄漏
在Svelte中,可以使用 onDestroy
生命周期函数来清理资源。例如,当组件创建时订阅了一个事件或者创建了一个定时器,在组件销毁时需要取消订阅或清除定时器。
实际应用场景
假设我们有一个组件,它会定时更新数据展示,在组件销毁时需要清除定时器,防止定时器继续运行占用资源。
代码示例
<script>
import { onDestroy } from'svelte';
let timer;
let count = 0;
timer = setInterval(() => {
count++;
}, 1000);
onDestroy(() => {
clearInterval(timer);
});
</script>
<p>The count is: {count}</p>
在上述代码中,setInterval
创建了一个定时器,每秒更新 count
。onDestroy
函数在组件销毁时被调用,清除了定时器,避免了内存泄漏。
2. 嵌套组件更新时协调生命周期确保数据一致性
Svelte组件有 beforeUpdate
和 afterUpdate
生命周期函数,可以利用它们来协调嵌套组件的更新。
实际应用场景
假设我们有一个父组件包含多个子组件,当父组件的数据更新时,我们希望在子组件更新之前做一些准备工作,在子组件更新之后做一些收尾工作。
代码示例
父组件 Parent.svelte
<script>
import Child from './Child.svelte';
let data = 'initial value';
const updateData = () => {
data = 'new value';
};
</script>
<button on:click={updateData}>Update Data</button>
<Child {data} />
子组件 Child.svelte
<script>
import { beforeUpdate, afterUpdate } from'svelte';
export let data;
beforeUpdate(() => {
console.log('Before child component update, data is:', data);
});
afterUpdate(() => {
console.log('After child component update, data is:', data);
});
</script>
<p>The data from parent is: {data}</p>
在上述代码中,当父组件点击按钮更新 data
时,子组件的 beforeUpdate
会在数据更新前被调用,afterUpdate
会在数据更新后被调用,通过这两个函数可以在更新前后执行相关逻辑,确保数据一致性。