Subscribe on changes!
avatar
Jun 9th 2021

Version

3.1.1

Reproduction link

https://codesandbox.io/s/sleepy-frog-2zshk?file=/src/components/HelloWorld.vue:243-292

Steps to reproduce

Open the reproduction and you can see the error message in the console right after.

What is expected?

It's supposed to display

Hello Vue in CodeSandbox!

Component name: HelloWorld

That "HelloWorld" is supposed to come from this.$options.name.

What is actually happening?

this is undefined and it throws an error.


https://github.com/vuejs/vue-next/blob/9a5bdb15df454fe99b4f695c85a2890d3e059b68/packages/runtime-core/src/apiInject.ts#L63-L64

According to the latest version of apiInject.ts, defaultValue function is called without this binding. It should've been defaultValue.call(instance).

The same example works fine with Vue2. https://codesandbox.io/s/purple-waterfall-hutku?file=/src/components/HelloWorld.vue:235-270

If it's not intended, I could open a PR for fix.

avatar
Jun 9th 2021

Looks like an easy fix (it should be defaultValue.call(instance.proxy)) - PR welcome!

avatar
Jun 9th 2021

Alright. PR coming!