feat(inject): allow usage in functional components

This commit is contained in:
Evan You 2019-11-05 22:35:24 -05:00
parent 9e03b6896d
commit e79c918676

View File

@ -1,4 +1,5 @@
import { currentInstance } from './component'
import { currentRenderingInstance } from './componentRenderUtils'
import { warn } from './warning'
export interface InjectionKey<T> extends Symbol {}
@ -31,8 +32,11 @@ export function inject(
key: InjectionKey<any> | string,
defaultValue?: unknown
) {
if (currentInstance) {
const provides = currentInstance.provides
// fallback to `currentRenderingInstance` so that this can be called in
// a functional component
const instance = currentInstance || currentRenderingInstance
if (instance) {
const provides = instance.provides
if (key in provides) {
// TS doesn't allow symbol as index type
return provides[key as string]
@ -42,6 +46,6 @@ export function inject(
warn(`injection "${String(key)}" not found.`)
}
} else if (__DEV__) {
warn(`inject() can only be used inside setup().`)
warn(`inject() can only be used inside setup() or functional components.`)
}
}