diff --git a/packages/compiler-core/src/transforms/transformElement.ts b/packages/compiler-core/src/transforms/transformElement.ts index 76ca1d443..1dca0c514 100644 --- a/packages/compiler-core/src/transforms/transformElement.ts +++ b/packages/compiler-core/src/transforms/transformElement.ts @@ -594,11 +594,9 @@ export function buildProps( hasDynamicKeys = true if (exp) { if (isVBind) { - // #10696 in case a v-bind object contains ref - pushRefVForMarker() - // have to merge early for compat build check - pushMergeArg() if (__COMPAT__) { + // have to merge early for compat build check + pushMergeArg() // 2.x v-bind object order compat if (__DEV__) { const hasOverridableKeys = mergeArgs.some(arg => { @@ -641,6 +639,9 @@ export function buildProps( } } + // #10696 in case a v-bind object contains ref + pushRefVForMarker() + pushMergeArg() mergeArgs.push(exp) } else { // v-on="obj" -> toHandlers(obj) diff --git a/packages/vue-compat/__tests__/compiler.spec.ts b/packages/vue-compat/__tests__/compiler.spec.ts index 2ae2f211a..68bb6e987 100644 --- a/packages/vue-compat/__tests__/compiler.spec.ts +++ b/packages/vue-compat/__tests__/compiler.spec.ts @@ -93,6 +93,16 @@ test('COMPILER_V_BIND_OBJECT_ORDER', () => { ).toHaveBeenWarned() }) +test('should not warn COMPILER_V_BIND_OBJECT_ORDER work with vFor', () => { + const vm = new Vue({ + template: `
`, + }).$mount() + expect(vm.$el).toBeInstanceOf(HTMLDivElement) + expect( + CompilerDeprecationTypes.COMPILER_V_BIND_OBJECT_ORDER, + ).not.toHaveBeenWarned() +}) + test('COMPILER_V_ON_NATIVE', () => { const spy = vi.fn() const vm = new Vue({