diff --git a/packages/runtime-core/__tests__/components/Suspense.spec.ts b/packages/runtime-core/__tests__/components/Suspense.spec.ts index 4e8da3288f1..9e05e6f80be 100644 --- a/packages/runtime-core/__tests__/components/Suspense.spec.ts +++ b/packages/runtime-core/__tests__/components/Suspense.spec.ts @@ -2395,4 +2395,67 @@ describe('Suspense', () => { expect(unmounted).toHaveBeenCalledTimes(1) }) }) + + // #14173 + test('renders multiple async components in Suspense with v-for and updates list order with HOC', async () => { + const CompAsyncSetup = defineAsyncComponent({ + props: ['item'], + render(ctx: any) { + return h('div', ctx.item.name) + }, + }) + + const CompWrapper = { + props: ['item'], + render(ctx: any) { + return h(CompAsyncSetup, { item: ctx.item }) + }, + } + + const items = ref([ + { id: 1, name: '111' }, + { id: 2, name: '222' }, + { id: 3, name: '333' }, + ]) + + const Comp = { + setup() { + return () => + h(Suspense, null, { + default: () => + h('div', [ + h( + Fragment, + null, + items.value.map(item => + h(CompWrapper, { item, key: item.id }), + ), + ), + ]), + }) + }, + } + + const root = nodeOps.createElement('div') + render(h(Comp), root) + + await nextTick() + await Promise.all(deps) + + expect(serializeInner(root)).toBe( + `