]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(defineModel): handle kebab-case model correctly (#12063)
author山吹色御守 <85992002+KazariEX@users.noreply.github.com>
Fri, 11 Oct 2024 02:35:57 +0000 (10:35 +0800)
committerGitHub <noreply@github.com>
Fri, 11 Oct 2024 02:35:57 +0000 (10:35 +0800)
close #12060

packages/runtime-core/__tests__/helpers/useModel.spec.ts
packages/runtime-core/src/helpers/useModel.ts

index 3c724b0ba0010972bce7642a79744b29896dba13..8d31848e1bcde178f52364b026234a5739fdc11a 100644 (file)
@@ -153,10 +153,10 @@ describe('useModel', () => {
 
     const compRender = vi.fn()
     const Comp = defineComponent({
-      props: ['fooBar'],
-      emits: ['update:fooBar'],
+      props: ['foo-bar'],
+      emits: ['update:foo-bar'],
       setup(props) {
-        foo = useModel(props, 'fooBar')
+        foo = useModel(props, 'foo-bar')
         return () => {
           compRender()
           return foo.value
@@ -192,10 +192,10 @@ describe('useModel', () => {
 
     const compRender = vi.fn()
     const Comp = defineComponent({
-      props: ['fooBar'],
-      emits: ['update:fooBar'],
+      props: ['foo-bar'],
+      emits: ['update:foo-bar'],
       setup(props) {
-        foo = useModel(props, 'fooBar')
+        foo = useModel(props, 'foo-bar')
         return () => {
           compRender()
           return foo.value
index 37fd1d719b006bacd8a6dc3310f63cb2707a168d..c40938ead3cee5edb62eba241c7c4133cd9c867a 100644 (file)
@@ -28,14 +28,14 @@ export function useModel(
     return ref() as any
   }
 
-  if (__DEV__ && !(i.propsOptions[0] as NormalizedProps)[name]) {
+  const camelizedName = camelize(name)
+  if (__DEV__ && !(i.propsOptions[0] as NormalizedProps)[camelizedName]) {
     warn(`useModel() called with prop "${name}" which is not declared.`)
     return ref() as any
   }
 
-  const camelizedName = camelize(name)
   const hyphenatedName = hyphenate(name)
-  const modifiers = getModelModifiers(props, name)
+  const modifiers = getModelModifiers(props, camelizedName)
 
   const res = customRef((track, trigger) => {
     let localValue: any
@@ -43,7 +43,7 @@ export function useModel(
     let prevEmittedValue: any
 
     watchSyncEffect(() => {
-      const propValue = props[name]
+      const propValue = props[camelizedName]
       if (hasChanged(localValue, propValue)) {
         localValue = propValue
         trigger()