在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]
}
答案 0 :(得分:1)
我相信这是因为效果会触发其他效果。
例如,一个path('flightdetails/', views.FlightDetailsListAPIView.as_view(), name='flightdetails'),
属性可以调出另一个computed
属性,在这种情况下,两个效果将同时运行。在那种情况下,“内部”效应要在“外部”效应完成之前运行,并且需要针对正确的效应注册依赖项。在运行“内部”效果时,暂时隐藏“外部”效果,然后在完成时恢复该效果。
因此,如果对computed
的调用导致递归返回到同一段代码,则长度可以大于1。