顾名思义,beforeUpdate 函数实现在DOM渲染完成前执行。afterUpdate函数则相反,它会运行在你的异步数据加载完成后。

总之,它们对于一些需要以状态驱动的地方很有用, 例如渲染标签的滚动位置。

这个 Eliza 聊天机器人窗口体验不太好,一旦消息超过窗口高度,你必须手动滚动窗口才能查看最新消息,让我们来改进它:

let div;
let autoscroll;

beforeUpdate(() => {
	autoscroll = div && (div.offsetHeight + div.scrollTop) > (div.scrollHeight - 20);
});

afterUpdate(() => {
	if (autoscroll) div.scrollTo(0, div.scrollHeight);
});

请注意,beforeUpdate 函数需要在组件挂载前运行,所以我们需要先将div与组件标签绑定,并判断div` 是否已被正常渲染。



		
loading editor...

Console

loading Svelte compiler...


		
loading editor...

Compiler options

result = svelte.compile(source, {
generate:
});


		
loading editor...