From: daiwei Date: Fri, 17 Jan 2025 03:17:59 +0000 (+0800) Subject: test: add test X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=34a473bdaf715443614f86352ee1dbbbae2ffbca;p=thirdparty%2Fvuejs%2Fcore.git test: add test --- diff --git a/packages/runtime-core/__tests__/helpers/useTemplateRef.spec.ts b/packages/runtime-core/__tests__/helpers/useTemplateRef.spec.ts index adc8ed66c7..82b395e3b9 100644 --- a/packages/runtime-core/__tests__/helpers/useTemplateRef.spec.ts +++ b/packages/runtime-core/__tests__/helpers/useTemplateRef.spec.ts @@ -1,10 +1,13 @@ import { type ShallowRef, + getCurrentInstance, h, + isReactive, nextTick, nodeOps, ref, render, + serializeInner, useTemplateRef, } from '@vue/runtime-test' @@ -70,6 +73,58 @@ describe('useTemplateRef', () => { expect(t1!.value).toBe(null) }) + // #12731 + test('should collect refs as reactive array in v-for', async () => { + let t1: any + const list = ref([]) + let currentInstance: any + const Comp = { + setup() { + t1 = useTemplateRef('refKey') + currentInstance = getCurrentInstance()! + }, + render() { + return h('div', null, [ + h('div', null, String(t1.value?.length)), + h( + 'ul', + list.value.map(i => + h( + 'li', + { + ref: 'refKey', + ref_for: true, + }, + i, + ), + ), + ), + ]) + }, + } + const root = nodeOps.createElement('div') + render(h(Comp), root) + expect(t1!.value).toBe(null) + expect(serializeInner(root)).toBe( + '
undefined
    ', + ) + + list.value.push(1) + await nextTick() + expect(isReactive(currentInstance.refs['refKey'])).toBe(true) + expect(t1!.value.length).toBe(1) + expect(serializeInner(root)).toBe( + '
    1
    • 1
    ', + ) + + list.value.push(2) + await nextTick() + expect(t1!.value.length).toBe(2) + expect(serializeInner(root)).toBe( + '
    2
    • 1
    • 2
    ', + ) + }) + test('should warn on duplicate useTemplateRef', () => { const root = nodeOps.createElement('div') render( diff --git a/packages/runtime-core/src/rendererTemplateRef.ts b/packages/runtime-core/src/rendererTemplateRef.ts index ae746fe0c8..76f50c4a81 100644 --- a/packages/runtime-core/src/rendererTemplateRef.ts +++ b/packages/runtime-core/src/rendererTemplateRef.ts @@ -130,7 +130,7 @@ export function setRef( setupState[ref] = refs[ref] } } else { - ref.value = shallowReactive([refValue]) + ref.value = [refValue] if (rawRef.k) refs[rawRef.k] = ref.value } } else if (!existing.includes(refValue)) {