diff --git a/packages/runtime-core/src/componentProps.ts b/packages/runtime-core/src/componentProps.ts index e1b3ab8a416..0eaed8c2d7e 100644 --- a/packages/runtime-core/src/componentProps.ts +++ b/packages/runtime-core/src/componentProps.ts @@ -190,19 +190,20 @@ export function updateProps( for (const key in rawCurrentProps) { if ( !rawProps || - ( - // for camelCase - !hasOwn(rawProps, key) && + // for camelCase + (!hasOwn(rawProps, key) && // it's possible the original props was passed in as kebab-case // and converted to camelCase (#955) ((kebabKey = hyphenate(key)) === key || !hasOwn(rawProps, kebabKey))) ) { if (options) { - if (rawPrevProps && ( + if ( + rawPrevProps && // for camelCase - rawPrevProps[key] !== undefined || - // for kebab-case - rawPrevProps[kebabKey!] !== undefined)) { + (rawPrevProps[key] !== undefined || + // for kebab-case + rawPrevProps[kebabKey!] !== undefined) + ) { props[key] = resolvePropValue( options, rawProps || EMPTY_OBJ, @@ -255,7 +256,11 @@ function setFullProps( let camelKey if (options && hasOwn(options, (camelKey = camelize(key)))) { props[camelKey] = value - } else if (!emits || !isEmitListener(emits, key)) { + } else if ( + (!emits || !isEmitListener(emits, key)) && + // ignore v-model listeners + !key.startsWith(`onUpdate:`) + ) { // Any non-declared (either as a prop or an emitted event) props are put // into a separate `attrs` object for spreading. Make sure to preserve // original key casing