await nextTick()
expect(mapRefs()).toMatchObject(['2', '3', '4'])
})
+
+
+
+ test('named ref in v-for', async () => {
+ const show = ref(true);
+ const list = reactive([1, 2, 3])
+ const listRefs = ref([])
+ const mapRefs = () => listRefs.value.map(n => serializeInner(n))
+
+ const App = {
+ setup() {
+ return { listRefs }
+ },
+ render() {
+ return show.value
+ ? h(
+ 'ul',
+ list.map(i =>
+ h(
+ 'li',
+ {
+ ref: 'listRefs',
+ ref_for: true
+ },
+ i
+ )
+ )
+ )
+ : null
+ }
+ }
+ const root = nodeOps.createElement('div')
+ render(h(App), root)
+
+ expect(mapRefs()).toMatchObject(['1', '2', '3'])
+
+ list.push(4)
+ await nextTick()
+ expect(mapRefs()).toMatchObject(['1', '2', '3', '4'])
+
+ list.shift()
+ await nextTick()
+ expect(mapRefs()).toMatchObject(['2', '3', '4'])
+
+ show.value = !show.value
+ await nextTick()
+
+ expect(mapRefs()).toMatchObject([])
+
+ show.value = !show.value
+ await nextTick()
+ expect(mapRefs()).toMatchObject(['2', '3', '4'])
+ })
+
+
})
if (!isArray(existing)) {
if (_isString) {
refs[ref] = [refValue]
+ if (hasOwn(setupState, ref)) {
+ setupState[ref] = refs[ref]
+ }
} else {
ref.value = [refValue]
if (rawRef.k) refs[rawRef.k] = ref.value