【问题标题】:Confused about vue3's reactive implementation对 vue3 的响应式实现感到困惑
【发布时间】:2020-09-27 10:47:55
【问题描述】:

在 vue3 的响应式implementation 中,有一个 effectStack。 我不明白如果效果将在 push() 之后立即为 pop(),为什么它必须是一个堆栈? effectStack的长度是否可能大于1?

try {
  enableTracking()
  effectStack.push(effect)
  activeEffect = effect
  return fn()
} finally {
  effectStack.pop()
  resetTracking()
  activeEffect = effectStack[effectStack.length - 1]
}

【问题讨论】:

    标签: vue.js reactive vuejs3


    【解决方案1】:

    我相信这是因为效果可以触发其他效果。

    例如,computed 属性可能会调用另一个 computed 属性,在这种情况下,两个效果将同时运行。在那种情况下,“内部”效果在“外部”效果完成之前运行,并且需要针对正确的效果注册依赖关系。当“内部”效果运行时,“外部”效果会暂时隐藏起来,然后在完成后恢复。

    因此,如果对 fn 的调用导致递归回到同一段代码,则长度可以大于 1。

    【讨论】:

    • 哦,是的,可能有嵌套效果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-10
    • 1970-01-01
    相关资源
    最近更新 更多