面试题答案
一键面试Svelte 的 afterUpdate
函数在组件生命周期中的位置及作用
- 位置:
afterUpdate
函数在组件的 DOM 更新完成后被调用。这意味着,当组件的状态发生变化,并且 Svelte 已经完成了对 DOM 的重新渲染和更新操作后,afterUpdate
会被触发。 - 作用:
afterUpdate
常用于需要在 DOM 更新后执行的操作,比如操作更新后的 DOM 元素、执行基于更新后 DOM 状态的计算等。它提供了一个在组件渲染完成后执行副作用操作的时机。
父子组件嵌套场景下的执行顺序及其原理
- 执行顺序:在父子组件嵌套场景下,子组件的
afterUpdate
函数会先于父组件的afterUpdate
函数执行。 - 原理:Svelte 在更新 DOM 时,会按照组件树的层次结构,从最深层的子组件开始更新。当子组件的 DOM 更新完成后,会触发子组件的
afterUpdate
。只有当所有子组件的 DOM 更新及afterUpdate
执行完毕后,父组件的 DOM 更新才完成,进而触发父组件的afterUpdate
。
代码示例
<script>
import Child from './Child.svelte';
let count = 0;
const increment = () => {
count++;
};
afterUpdate(() => {
console.log('Parent component has been updated');
});
</script>
<button on:click={increment}>Increment</button>
<Child {count} />
Child.svelte
<script>
export let count;
afterUpdate(() => {
console.log('Child component has been updated');
});
</script>
<p>{count}</p>
当点击父组件中的按钮时,count
状态更新,子组件先更新 DOM 并触发 afterUpdate
打印信息,然后父组件更新 DOM 并触发 afterUpdate
打印信息,从而验证上述执行顺序。