Svelte:为什么 DOM 元素属性(offsetHeight、scrollHeight 等)在 beforeUpdate 中有效?
Svelte: Why are DOM element properties (offsetHeight, scrollHeight, etc.) valid in the beforeUpdate?
根据这个精巧的教程:Svelte Official Tutorials,beforeUpdate
生命周期方法在 DOM 更新之前运行。 afterUpdate
在 DOM 更新后运行。
他们依靠 div 的 offsetHeight 和 scrollTop 来知道是否应该滚动以显示新内容。
但这在 beforeUpdate
中如何运作? DOM 尚未更新,因此高度未更改,因此现在进行计算没有意义。
这不应该在 afterUpdate
中完成,以便更新 DOM 并且我们得到正确的 offsetHeight 和 scrollTop 吗?
通常(不是在 Svelte 的上下文中),这些属性是否在使用 DOM 树渲染 DOM 之前计算并最终确定?
您关于 beforeUpdate
和 afterUpdate
的时间安排是正确的。但是无论如何,Svelte 教程代码都是正确的,因为逻辑是这样的:
- 在
beforeUpdate
中,检查scrollbar/position是否靠近滚动容器的底部
- 在
afterUpdate
中,仅当 beforeUpdate
中的检查返回 true
时才滚动到底部。这样做是为了在用户向上滚动然后输入新消息时不滚动到底部 - 在这种情况下,他可能想留在那个位置。
根据这个精巧的教程:Svelte Official Tutorials,beforeUpdate
生命周期方法在 DOM 更新之前运行。 afterUpdate
在 DOM 更新后运行。
他们依靠 div 的 offsetHeight 和 scrollTop 来知道是否应该滚动以显示新内容。
但这在 beforeUpdate
中如何运作? DOM 尚未更新,因此高度未更改,因此现在进行计算没有意义。
这不应该在 afterUpdate
中完成,以便更新 DOM 并且我们得到正确的 offsetHeight 和 scrollTop 吗?
通常(不是在 Svelte 的上下文中),这些属性是否在使用 DOM 树渲染 DOM 之前计算并最终确定?
您关于 beforeUpdate
和 afterUpdate
的时间安排是正确的。但是无论如何,Svelte 教程代码都是正确的,因为逻辑是这样的:
- 在
beforeUpdate
中,检查scrollbar/position是否靠近滚动容器的底部 - 在
afterUpdate
中,仅当beforeUpdate
中的检查返回true
时才滚动到底部。这样做是为了在用户向上滚动然后输入新消息时不滚动到底部 - 在这种情况下,他可能想留在那个位置。