-import {
- EffectScope,
- type Ref,
- pauseTracking,
- ref,
- resetTracking,
-} from '@vue/reactivity'
+import { EffectScope } from '@vue/reactivity'
import { EMPTY_OBJ } from '@vue/shared'
import type { Block } from './render'
dirs: Map<Node, DirectiveBinding[]>
// lifecycle
- get isMounted(): boolean
- get isUnmounted(): boolean
+ isMounted: boolean
+ isUnmounted: boolean
isUpdating: boolean
- isUnmountedRef: Ref<boolean>
- isMountedRef: Ref<boolean>
// TODO: registory of provides, lifecycles, ...
/**
* @internal
export const createComponentInstance = (
component: ObjectComponent | FunctionalComponent,
): ComponentInternalInstance => {
- const isMountedRef = ref(false)
- const isUnmountedRef = ref(false)
const instance: ComponentInternalInstance = {
uid: uid++,
block: null,
dirs: new Map(),
// lifecycle
- get isMounted() {
- pauseTracking()
- const value = isMountedRef.value
- resetTracking()
- return value
- },
- get isUnmounted() {
- pauseTracking()
- const value = isUnmountedRef.value
- resetTracking()
- return value
- },
+ isMounted: false,
+ isUnmounted: false,
isUpdating: false,
- isMountedRef,
- isUnmountedRef,
// TODO: registory of provides, appContext, lifecycles, ...
/**
* @internal
invokeDirectiveHook(instance, 'beforeMount')
insert(block, instance.container)
- instance.isMountedRef.value = true
+ instance.isMounted = true
// hook: mounted
invokeDirectiveHook(instance, 'mounted')
scope.stop()
block && remove(block, container)
- instance.isMountedRef.value = false
- instance.isUnmountedRef.value = true
+ instance.isMounted = false
+ instance.isUnmounted = true
// hook: unmounted
invokeDirectiveHook(instance, 'unmounted')