expect(el.value).toBe(null)
})
+ it('unset old ref when new ref is absent', async () => {
+ const root1 = nodeOps.createElement('div')
+ const root2 = nodeOps.createElement('div')
+ const el1 = ref(null)
+ const el2 = ref(null)
+ const toggle = ref(true)
+
+ const Comp1 = {
+ setup() {
+ return () => (toggle.value ? h('div', { ref: el1 }) : h('div'))
+ },
+ }
+
+ const Comp2 = {
+ setup() {
+ return () => h('div', { ref: toggle.value ? el2 : undefined })
+ },
+ }
+
+ render(h(Comp1), root1)
+ render(h(Comp2), root2)
+
+ expect(el1.value).toBe(root1.children[0])
+ expect(el2.value).toBe(root2.children[0])
+
+ toggle.value = false
+ await nextTick()
+ expect(el1.value).toBe(null)
+ expect(el2.value).toBe(null)
+ })
+
test('string ref inside slots', async () => {
const root = nodeOps.createElement('div')
const spy = vi.fn()
// set ref
if (ref != null && parentComponent) {
setRef(ref, n1 && n1.ref, parentSuspense, n2 || n1, !n2)
+ } else if (ref == null && n1 && n1.ref != null) {
+ setRef(n1.ref, null, parentSuspense, n1, true)
}
}