对vue3的反应式实现感到困惑

时间:2020-09-27 10:47:55

标签: vue.js reactive vuejs3

在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]
}

1 个答案:

答案 0 :(得分:1)

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

例如,一个path('flightdetails/', views.FlightDetailsListAPIView.as_view(), name='flightdetails'), 属性可以调出另一个computed属性,在这种情况下,两个效果将同时运行。在那种情况下,“内部”效应要在“外部”效应完成之前运行,并且需要针对正确的效应注册依赖项。在运行“内部”效果时,暂时隐藏“外部”效果,然后在完成时恢复该效果。

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

相关问题