vuejs / vue

This is the repo for Vue 2. For Vue 3, go to https://github.com/vuejs/core
http://v2.vuejs.org
MIT License
208.05k stars 33.69k forks source link

[2.7] Composition API's inject doesn't work for things provided in the same component #13006

Open maxbogue opened 1 year ago

maxbogue commented 1 year ago

Version

2.7.14

Reproduction link

codesandbox.io

Steps to reproduce

Using the Composition API, provide a value and then inject it in the same component.

What is expected?

The value will be injected; this is the behavior in the 2.6 @vue/composition-api plugin.

What is actually happening?

This injection key is not found, printing a warning (and breaking the app if it depends on this behavior):

[Vue warn]: injection "Symbol(FooKey)" not found.


It seems this was reported before in https://github.com/vuejs/vue/issues/12636 but the fix targeted some lifecycle thing instead of this underlying functionality change. I'm trying to upgrade my company from Vue 2.6 to Vue 2.7 (and hopefully to Vue 3 after that) but little breaking changes like this are making it very difficult.

posva commented 1 year ago

I think this is by design and the @vue/composition-api lib probably has a bug 😬

maxbogue commented 1 year ago

May I ask why? I don't understand why you wouldn't be able to access something from the current instance after you provide it. Seems perfectly reasonable, as all the necessary context exists.

This sort of breaking change makes it very difficult to update large applications to newer versions of Vue. I know maybe you don't consider the transition from @vue/composition-api as breaking but that's the reality for apps still stuck on Vue 2.6 that were early adopters of the Composition API.

CraxGrix commented 2 months ago

Is there any new progress on this issue?