下一次Dom更新
# 题目:
看到这个题,这里点击按钮的核心逻辑是每次点击 count 变量都加 1,这时通过 counter.value.textContent 去拿到 counter 这个 Dom 元素的 textContent 值应该是 1,第一次应该就要输出 true,但现在是输出 false,到第二次才输出 true。也就是这个题所说的问题,改变响应式状态时,dom 不会同步更新。
# 分析:
来到 vue 官网,看 nextTick 这个 api 的说明,我们可以发现问题所在,也就是这句话。当你在 Vue 中更改响应式状态时,最终的 DOM 更新并不是同步生效的,而是由 Vue 将它们缓存在一个队列中,直到下一个“tick”才一起执行。这样是为了确保每个组件无论发生多少状态改变,都仅执行一次更新。
# 解决:
那么这里显然我们解决问题的逻辑就是,通过 nextTick 这个 api 确保更改响应式状态的时候,Dom 更新是同步生效的。现在可以看到当 count 的值更新为 1 的时候,Dom 的更新也同步生效了,所以第一次点击变为数字 1 的时候就输出为 true。
# 为什么要设计 nextTick?
可以看下这篇文章,讲得不错。 nextTick (opens new window)