|
|
@@ -442,4 +442,59 @@ describe('api: template refs', () => {
|
|
|
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'])
|
|
|
+ })
|
|
|
+
|
|
|
+
|
|
|
})
|