Просмотр исходного кода

feat(props): enable case conversion in all builds, preserve casing for attrs

Evan You 6 лет назад
Родитель
Сommit
42bf9ca3e5
1 измененных файлов с 10 добавлено и 6 удалено
  1. 10 6
      packages/runtime-core/src/componentProps.ts

+ 10 - 6
packages/runtime-core/src/componentProps.ts

@@ -128,11 +128,13 @@ export function resolveProps(
     for (const key in rawProps) {
       // key, ref are reserved
       if (isReservedProp(key)) continue
-      const camelKey = __RUNTIME_COMPILE__ ? camelize(key) : key
-      // any non-declared data are put into a separate `attrs` object
-      // for spreading
+      // prop option names are camelized during normalization, so to support
+      // kebab -> camel conversion here we need to camelize the key.
+      const camelKey = camelize(key)
       if (hasDeclaredProps && !hasOwn(options, camelKey)) {
-        ;(attrs || (attrs = {}))[camelKey] = rawProps[key]
+        // Any non-declared props are put into a separate `attrs` object
+        // for spreading. Make sure to preserve original key casing
+        ;(attrs || (attrs = {}))[key] = rawProps[key]
       } else {
         setProp(camelKey, rawProps[key])
       }
@@ -164,9 +166,11 @@ export function resolveProps(
       }
       // runtime validation
       if (__DEV__ && rawProps) {
-        let rawValue = rawProps[key]
-        if (__RUNTIME_COMPILE__ && !(key in rawProps)) {
+        let rawValue
+        if (!(key in rawProps) && hyphenate(key) in rawProps) {
           rawValue = rawProps[hyphenate(key)]
+        } else {
+          rawValue = rawProps[key]
         }
         validateProp(key, toRaw(rawValue), opt, isAbsent)
       }