diff --git a/packages/runtime-core/src/devtools.ts b/packages/runtime-core/src/devtools.ts index 36c5763dcf1..83d7483df39 100644 --- a/packages/runtime-core/src/devtools.ts +++ b/packages/runtime-core/src/devtools.ts @@ -28,6 +28,7 @@ interface DevtoolsHook { once: (event: string, handler: Function) => void off: (event: string, handler: Function) => void appRecords: AppRecord[] + _buffer: any[][] } export let devtools: DevtoolsHook @@ -101,8 +102,26 @@ export const devtoolsComponentAdded = /*#__PURE__*/ createDevtoolsComponentHook( export const devtoolsComponentUpdated = /*#__PURE__*/ createDevtoolsComponentHook(DevtoolsHooks.COMPONENT_UPDATED) -export const devtoolsComponentRemoved = - /*#__PURE__*/ createDevtoolsComponentHook(DevtoolsHooks.COMPONENT_REMOVED) +const _devtoolsComponentRemoved = /*#__PURE__*/ createDevtoolsComponentHook( + DevtoolsHooks.COMPONENT_REMOVED +) + +export const devtoolsComponentRemoved = ( + component: ComponentInternalInstance +) => { + if (devtools && devtools._buffer.length) { + let wasBuffered = false + devtools._buffer = devtools._buffer.filter(item => { + if (item.some(arg => arg === component)) { + wasBuffered = true + return false + } + return true + }) + if (wasBuffered) return + } + _devtoolsComponentRemoved(component) +} function createDevtoolsComponentHook(hook: DevtoolsHooks) { return (component: ComponentInternalInstance) => {