Skip to content

Commit b3ad1c9

Browse files
committed
fix(runtime-vapor): tweak expose fallback value
1 parent 3ca2f21 commit b3ad1c9

File tree

2 files changed

+64
-3
lines changed

2 files changed

+64
-3
lines changed

packages/runtime-vapor/__tests__/apiExpose.spec.ts

+63-2
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
1-
import { ref } from '@vue/reactivity'
1+
import { ref, shallowRef } from '@vue/reactivity'
22
import { createComponent } from '../src/apiCreateComponent'
33
import { setRef } from '../src/dom/templateRef'
44
import { makeRender } from './_utils'
5+
import {
6+
type ComponentInternalInstance,
7+
getCurrentInstance,
8+
} from '../src/component'
59

610
const define = makeRender()
711
describe('api: expose', () => {
8-
test('string ref mount (component)', () => {
12+
test('via setup context', () => {
913
const { component: Child } = define({
1014
setup(_, { expose }) {
1115
expose({
@@ -33,4 +37,61 @@ describe('api: expose', () => {
3337
expect(childRef.value.bar).toBe(2)
3438
expect(childRef.value.baz).toBeUndefined()
3539
})
40+
41+
test('via setup context (expose empty)', () => {
42+
let childInstance: ComponentInternalInstance | null = null
43+
const { component: Child } = define({
44+
setup(_) {
45+
childInstance = getCurrentInstance()
46+
},
47+
})
48+
const childRef = shallowRef()
49+
const { render } = define({
50+
render: () => {
51+
const n0 = createComponent(Child)
52+
setRef(n0, childRef)
53+
return n0
54+
},
55+
})
56+
57+
render()
58+
expect(childInstance!.exposed).toBeUndefined()
59+
expect(childRef.value).toBe(childInstance!)
60+
})
61+
62+
test('warning for ref', () => {
63+
const { render } = define({
64+
setup(_, { expose }) {
65+
expose(ref(1))
66+
},
67+
})
68+
render()
69+
expect(
70+
'expose() should be passed a plain object, received ref',
71+
).toHaveBeenWarned()
72+
})
73+
74+
test('warning for array', () => {
75+
const { render } = define({
76+
setup(_, { expose }) {
77+
expose(['focus'])
78+
},
79+
})
80+
render()
81+
expect(
82+
'expose() should be passed a plain object, received array',
83+
).toHaveBeenWarned()
84+
})
85+
86+
test('warning for function', () => {
87+
const { render } = define({
88+
setup(_, { expose }) {
89+
expose(() => null)
90+
},
91+
})
92+
render()
93+
expect(
94+
'expose() should be passed a plain object, received function',
95+
).toHaveBeenWarned()
96+
})
3697
})

packages/runtime-vapor/src/dom/templateRef.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ export function setRef(el: RefEl, ref: NodeRef, refFor = false) {
3535
return
3636
}
3737

38-
const refValue = isVaporComponent(el) ? el.exposed || currentInstance : el
38+
const refValue = isVaporComponent(el) ? el.exposed || el : el
3939

4040
const refs =
4141
currentInstance.refs === EMPTY_OBJ

0 commit comments

Comments
 (0)