Parcourir la source

feat(devtools): improved KeepAlive support

This change allows the devtools to access the cached vnodes from the KeepAlive component in order to display them as inactive in the components tree
Guillaume Chau il y a 5 ans
Parent
commit
03ae3006e1
1 fichiers modifiés avec 15 ajouts et 0 suppressions
  1. 15 0
      packages/runtime-core/src/components/KeepAlive.ts

+ 15 - 0
packages/runtime-core/src/components/KeepAlive.ts

@@ -34,6 +34,7 @@ import {
 } from '../renderer'
 } from '../renderer'
 import { setTransitionHooks } from './BaseTransition'
 import { setTransitionHooks } from './BaseTransition'
 import { ComponentRenderContext } from '../componentPublicInstance'
 import { ComponentRenderContext } from '../componentPublicInstance'
+import { devtoolsComponentAdded } from '../devtools'
 
 
 type MatchPattern = string | RegExp | string[] | RegExp[]
 type MatchPattern = string | RegExp | string[] | RegExp[]
 
 
@@ -95,6 +96,10 @@ const KeepAliveImpl = {
     const keys: Keys = new Set()
     const keys: Keys = new Set()
     let current: VNode | null = null
     let current: VNode | null = null
 
 
+    if (__DEV__ || __FEATURE_PROD_DEVTOOLS__) {
+      ;(instance as any).__v_cache = cache
+    }
+
     const parentSuspense = instance.suspense
     const parentSuspense = instance.suspense
 
 
     const {
     const {
@@ -132,6 +137,11 @@ const KeepAliveImpl = {
           invokeVNodeHook(vnodeHook, instance.parent, vnode)
           invokeVNodeHook(vnodeHook, instance.parent, vnode)
         }
         }
       }, parentSuspense)
       }, parentSuspense)
+
+      if (__DEV__ || __FEATURE_PROD_DEVTOOLS__) {
+        // Update components tree
+        devtoolsComponentAdded(instance)
+      }
     }
     }
 
 
     sharedContext.deactivate = (vnode: VNode) => {
     sharedContext.deactivate = (vnode: VNode) => {
@@ -147,6 +157,11 @@ const KeepAliveImpl = {
         }
         }
         instance.isDeactivated = true
         instance.isDeactivated = true
       }, parentSuspense)
       }, parentSuspense)
+
+      if (__DEV__ || __FEATURE_PROD_DEVTOOLS__) {
+        // Update components tree
+        devtoolsComponentAdded(instance)
+      }
     }
     }
 
 
     function unmount(vnode: VNode) {
     function unmount(vnode: VNode) {