Skip to content

Commit

Permalink
📖 更新文章
Browse files Browse the repository at this point in the history
  • Loading branch information
fxzer committed Aug 4, 2024
1 parent 4f71369 commit 64a4467
Showing 1 changed file with 15 additions and 0 deletions.
15 changes: 15 additions & 0 deletions docs/Interview/Vue/nextTick.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
> vue3 为什么 nextTick 中就能拿到 DOM 更新后的结果了
在 Vue 3 中,组件的更新过程是异步的。当你更改组件的数据时,Vue 会将这些更改放入一个队列中,并计划重新渲染组件。然而,它不会立即执行这些更新,而是等待当前执行栈清空,然后批量执行所有的更新。这样做可以避免不必要的重复渲染,提高性能。

以下是为什么 `nextTick` 能够获取到 DOM 更新后的结果的几个关键点:

1. **异步更新队列**:Vue 3 使用异步更新队列来处理数据变化和视图更新。当你更改了响应式数据,Vue 会将更新放入队列,而不是立即执行。

2. **微任务(Microtask)**`nextTick` 利用 JavaScript 的微任务机制来安排回调函数的执行。微任务通常在当前执行栈清空后立即执行,早于宏任务(如 setTimeout、setInterval)。

3. **DOM 更新完成后**:由于 `nextTick` 的回调函数是在微任务中执行的,所以它们会在所有 DOM 更新完成后执行。这意味着你可以在 `nextTick` 的回调中访问更新后的 DOM。

4. **避免不必要的渲染**:通过异步更新和 `nextTick`,Vue 可以避免在同一个事件循环中多次渲染同一个组件,这有助于提高性能。

5. **兼容性和可预测性**:使用 `nextTick` 可以确保你的代码总是在 DOM 更新后执行,这使得代码的行为更加可预测,并且可以避免直接操作 DOM 带来的复杂性。

0 comments on commit 64a4467

Please sign in to comment.