]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(dx): warn against reserved keys as prop name
authorEvan You <yyx990803@gmail.com>
Fri, 9 Feb 2024 00:47:06 +0000 (08:47 +0800)
committerEvan You <yyx990803@gmail.com>
Fri, 9 Feb 2024 00:47:06 +0000 (08:47 +0800)
close #10281

packages/runtime-core/__tests__/componentProps.spec.ts
packages/runtime-core/src/componentProps.ts

index 6760a957f120d5ef77a469490dff8fe412a5d056..6fc5d4dd2d72e7833c2eb2ef7ed08a9867efef5a 100644 (file)
@@ -729,4 +729,23 @@ describe('component props', () => {
 
     expect(Object.keys(props.msg).length).toBe(1)
   })
+
+  test('should warn against reserved prop names', () => {
+    const Comp = defineComponent({
+      props: {
+        key: String,
+        ref: String,
+        $foo: String,
+      },
+      render() {},
+    })
+
+    const root = nodeOps.createElement('div')
+
+    render(h(Comp, { msg: 'test' }), root)
+
+    expect(`Invalid prop name: "key"`).toHaveBeenWarned()
+    expect(`Invalid prop name: "ref"`).toHaveBeenWarned()
+    expect(`Invalid prop name: "$foo"`).toHaveBeenWarned()
+  })
 })
index 088f4da3c6ed7394848ecaafcf9639ea213fb4f9..d1822a1638dc0f4bad64d68977bb4e10b6c4b7c9 100644 (file)
@@ -586,7 +586,7 @@ export function normalizePropsOptions(
 }
 
 function validatePropName(key: string) {
-  if (key[0] !== '$') {
+  if (key[0] !== '$' && !isReservedProp(key)) {
     return true
   } else if (__DEV__) {
     warn(`Invalid prop name: "${key}" is a reserved property.`)