|
@@ -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()
|
|
|
|
|
|