feat(runtime-core): support using inject() inside props default functions

This commit is contained in:
Evan You
2020-09-17 15:59:01 -04:00
parent 985bd2bcb5
commit 58c31e3699
2 changed files with 46 additions and 10 deletions

View File

@@ -27,7 +27,8 @@ import {
Data,
ComponentInternalInstance,
ComponentOptions,
ConcreteComponent
ConcreteComponent,
setCurrentInstance
} from './component'
import { isEmitListener } from './componentEmits'
import { InternalObjectKey } from './vnode'
@@ -179,7 +180,8 @@ export function updateProps(
options,
rawCurrentProps,
camelizedKey,
value
value,
instance
)
}
} else {
@@ -214,7 +216,8 @@ export function updateProps(
options,
rawProps || EMPTY_OBJ,
key,
undefined
undefined,
instance
)
}
} else {
@@ -277,7 +280,8 @@ function setFullProps(
options!,
rawCurrentProps,
key,
rawCurrentProps[key]
rawCurrentProps[key],
instance
)
}
}
@@ -287,7 +291,8 @@ function resolvePropValue(
options: NormalizedProps,
props: Data,
key: string,
value: unknown
value: unknown,
instance: ComponentInternalInstance
) {
const opt = options[key]
if (opt != null) {
@@ -295,10 +300,13 @@ function resolvePropValue(
// default values
if (hasDefault && value === undefined) {
const defaultValue = opt.default
value =
opt.type !== Function && isFunction(defaultValue)
? defaultValue(props)
: defaultValue
if (opt.type !== Function && isFunction(defaultValue)) {
setCurrentInstance(instance)
value = defaultValue(props)
setCurrentInstance(null)
} else {
value = defaultValue
}
}
// boolean casting
if (opt[BooleanFlags.shouldCast]) {