n1 = null
}
- const { type, shapeFlag } = n2
+ const { type, ref, shapeFlag } = n2
switch (type) {
case Text:
processText(n1, n2, container, anchor)
warn('Invalid VNode type:', type, `(${typeof type})`)
}
}
+
+ // set ref
+ if (ref != null && parentComponent) {
+ const refValue =
+ shapeFlag & ShapeFlags.STATEFUL_COMPONENT ? n2.component!.proxy : n2.el
+ setRef(ref, n1 && n1.ref, parentComponent, refValue)
+ }
}
const processText: ProcessTextOrCommentFn = (n1, n2, container, anchor) => {
} else {
patchElement(n1, n2, parentComponent, parentSuspense, isSVG, optimized)
}
- if (n2.ref != null && parentComponent) {
- setRef(n2.ref, n1 && n1.ref, parentComponent, n2.el)
- }
}
const mountElement = (
n2.el = n1.el
}
}
- if (n2.ref != null && parentComponent) {
- if (__DEV__ && !(n2.shapeFlag & ShapeFlags.STATEFUL_COMPONENT)) {
- pushWarningContext(n2)
- warn(
- `Functional components do not support "ref" because they do not ` +
- `have instances.`
- )
- popWarningContext()
- }
- setRef(n2.ref, n1 && n1.ref, parentComponent, n2.component!.proxy)
- }
}
const mountComponent: MountComponentFn = (