}
})
const app = createApp(Parent)
- // TODO remove in 3.3
- app.config.unwrapInjectedRef = true
const root = nodeOps.createElement('div')
app.mount(root)
expect(serializeInner(root)).toBe(`1`)
expect(serializeInner(root)).toBe(`3`)
})
- // TODO remove in 3.3
- test('provide/inject refs (compat)', async () => {
- const n = ref(0)
- const np = computed(() => n.value + 1)
- const Parent = defineComponent({
- provide() {
- return {
- n,
- np
- }
- },
- render: () => h(Child)
- })
- const Child = defineComponent({
- inject: ['n', 'np'],
- render(this: any) {
- return this.n.value + this.np.value
- }
- })
- const app = createApp(Parent)
-
- const root = nodeOps.createElement('div')
- app.mount(root)
- expect(serializeInner(root)).toBe(`1`)
-
- n.value++
- await nextTick()
- expect(serializeInner(root)).toBe(`3`)
-
- expect(`injected property "n" is a ref`).toHaveBeenWarned()
- expect(`injected property "np" is a ref`).toHaveBeenWarned()
- })
-
test('provide accessing data in extends', () => {
const Base = defineComponent({
data() {
*/
isCustomElement?: (tag: string) => boolean
+ // TODO remove in 3.4
/**
* Temporary config for opt-in to unwrap injected refs.
- * TODO deprecate in 3.3
+ * @deprecated this no longer has effect. 3.3 always unwraps injected refs.
*/
unwrapInjectedRef?: boolean
}
}
const context = createAppContext()
+
+ // TODO remove in 3.4
+ if (__DEV__) {
+ Object.defineProperty(context.config, 'unwrapInjectedRef', {
+ get() {
+ return true
+ },
+ set() {
+ warn(
+ `app.config.unwrapInjectedRef has been deprecated. ` +
+ `3.3 now alawys unwraps injected refs in Options API.`
+ )
+ }
+ })
+ }
+
const installedPlugins = new Set()
let isMounted = false
// - watch (deferred since it relies on `this` access)
if (injectOptions) {
- resolveInjections(
- injectOptions,
- ctx,
- checkDuplicateProperties,
- instance.appContext.config.unwrapInjectedRef
- )
+ resolveInjections(injectOptions, ctx, checkDuplicateProperties)
}
if (methods) {
export function resolveInjections(
injectOptions: ComponentInjectOptions,
ctx: any,
- checkDuplicateProperties = NOOP as any,
- unwrapRef = false
+ checkDuplicateProperties = NOOP as any
) {
if (isArray(injectOptions)) {
injectOptions = normalizeInject(injectOptions)!
injected = inject(opt)
}
if (isRef(injected)) {
- // TODO remove the check in 3.3
- if (unwrapRef) {
- Object.defineProperty(ctx, key, {
- enumerable: true,
- configurable: true,
- get: () => (injected as Ref).value,
- set: v => ((injected as Ref).value = v)
- })
- } else {
- if (__DEV__) {
- warn(
- `injected property "${key}" is a ref and will be auto-unwrapped ` +
- `and no longer needs \`.value\` in the next minor release. ` +
- `To opt-in to the new behavior now, ` +
- `set \`app.config.unwrapInjectedRef = true\` (this config is ` +
- `temporary and will not be needed in the future.)`
- )
- }
- ctx[key] = injected
- }
+ // unwrap injected refs (ref #4196)
+ Object.defineProperty(ctx, key, {
+ enumerable: true,
+ configurable: true,
+ get: () => (injected as Ref).value,
+ set: v => ((injected as Ref).value = v)
+ })
} else {
ctx[key] = injected
}