components?: Record<string, PublicAPIComponent>
directives?: Record<string, Directive>
inheritAttrs?: boolean
+ inheritRef?: boolean
emits?: E | EE[]
// Internal ------------------------------------------------------------------
// would prevent it from being tree-shaken.
__isKeepAlive: true,
+ inheritRef: true,
+
props: {
include: [String, RegExp, Array],
exclude: [String, RegExp, Array],
ComponentInternalInstance,
createComponentInstance,
Data,
- setupComponent
+ setupComponent,
+ Component
} from './component'
import {
renderComponentRoot,
import { createHydrationFunctions, RootHydrateFunction } from './hydration'
import { invokeDirectiveHook } from './directives'
import { startMeasure, endMeasure } from './profiling'
+import { ComponentPublicInstance } from './componentProxy'
export interface Renderer<HostElement = any> {
render: RootRenderFunction<HostElement>
parent: ComponentInternalInstance,
vnode: VNode | null
) => {
- const value = vnode
- ? vnode.shapeFlag & ShapeFlags.STATEFUL_COMPONENT
- ? vnode.component!.proxy
- : vnode.el
- : null
+ let value: ComponentPublicInstance | RendererNode | null
+ if (!vnode) {
+ value = null
+ } else {
+ const { el, component, shapeFlag, type } = vnode
+ if (shapeFlag & ShapeFlags.COMPONENT && (type as Component).inheritRef) {
+ return
+ }
+ if (shapeFlag & ShapeFlags.STATEFUL_COMPONENT) {
+ value = component!.proxy
+ } else {
+ value = el
+ }
+ }
+
const [owner, ref] = rawRef
if (__DEV__ && !owner) {
warn(
{ slots }
) => h(BaseTransition, resolveTransitionProps(props), slots)
+Transition.inheritRef = true
+
export const TransitionPropsValidators = (Transition.props = {
...(BaseTransition as any).props,
name: String,