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

wip: delete keys from props proxy when needed

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

+ 13 - 0
packages/runtime-core/src/componentProps.ts

@@ -12,6 +12,7 @@ import {
 } from '@vue/shared'
 } from '@vue/shared'
 import { warn } from './warning'
 import { warn } from './warning'
 import { Data, ComponentInstance } from './component'
 import { Data, ComponentInstance } from './component'
+import { FULL_PROPS } from './patchFlags'
 
 
 export type ComponentPropsOptions<P = Data> = {
 export type ComponentPropsOptions<P = Data> = {
   [K in keyof P]: Prop<P[K]> | null
   [K in keyof P]: Prop<P[K]> | null
@@ -147,6 +148,18 @@ export function resolveProps(
     attrs = props
     attrs = props
   }
   }
 
 
+  // in case of dynamic props, check if we need to delete keys from
+  // the props proxy
+  const { patchFlag } = instance.vnode
+  if (propsProxy !== null && (patchFlag === 0 || patchFlag & FULL_PROPS)) {
+    const rawInitialProps = unwrap(propsProxy)
+    for (const key in rawInitialProps) {
+      if (!props.hasOwnProperty(key)) {
+        delete propsProxy[key]
+      }
+    }
+  }
+
   // lock immutable
   // lock immutable
   lock()
   lock()