-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
15 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 带来的复杂性。 |