Svelte:为什么 DOM 元素属性(offsetHeight、scrollHeight 等)在 beforeUpdate 中有效?

Svelte: Why are DOM element properties (offsetHeight, scrollHeight, etc.) valid in the beforeUpdate?

根据这个精巧的教程:Svelte Official TutorialsbeforeUpdate 生命周期方法在 DOM 更新之前运行。 afterUpdate 在 DOM 更新后运行。

他们依靠 div 的 offsetHeight 和 scrollTop 来知道是否应该滚动以显示新内容。

但这在 beforeUpdate 中如何运作? DOM 尚未更新,因此高度未更改,因此现在进行计算没有意义。

这不应该在 afterUpdate 中完成,以便更新 DOM 并且我们得到正确的 offsetHeight 和 scrollTop 吗?

通常(不是在 Svelte 的上下文中),这些属性是否在使用 DOM 树渲染 DOM 之前计算并最终确定?

您关于 beforeUpdateafterUpdate 的时间安排是正确的。但是无论如何,Svelte 教程代码都是正确的,因为逻辑是这样的:

  1. beforeUpdate中,检查scrollbar/position是否靠近滚动容器的底部
  2. afterUpdate 中,仅当 beforeUpdate 中的检查返回 true 时才滚动到底部。这样做是为了在用户向上滚动然后输入新消息时不滚动到底部 - 在这种情况下,他可能想留在那个位置。