Skip to content

Comments

fix(shared): support provideLocal/injectLocal in vapor mode#5050

Merged
antfu merged 1 commit intovueuse:mainfrom
ZKunZhang:fix/provide-local-vapor-scope
Sep 20, 2025
Merged

fix(shared): support provideLocal/injectLocal in vapor mode#5050
antfu merged 1 commit intovueuse:mainfrom
ZKunZhang:fix/provide-local-vapor-scope

Conversation

@ZKunZhang
Copy link
Contributor

Before submitting the PR, please make sure you do the following

  • Read the Contributing Guidelines.
  • Read the Pull Request Guidelines.
  • Check that there isn't already a PR that solves the problem the same way to avoid creating a duplicate.
  • Provide a description in this PR that addresses what the PR is solving, or reference the issue that it solves (e.g. fixes #123).
  • Ideally, include relevant tests that fail without this PR but pass with it.
⚠️ Slowing down new functions

Warning: Slowing down new functions

As the VueUse audience continues to grow, we have been inundated with an overwhelming number of feature requests and pull requests. As a result, maintaining the project has become increasingly challenging and has stretched our capacity to its limits. As such, in the near future, we may need to slow down our acceptance of new features and prioritize the stability and quality of existing functions. Please note that new features for VueUse may not be accepted at this time. If you have any new ideas, we suggest that you first incorporate them into your own codebase, iterate on them to suit your needs, and assess their generalizability. If you strongly believe that your ideas are beneficial to the community, you may submit a pull request along with your use cases, and we would be happy to review and discuss them. Thank you for your understanding.


Description

Additional context

Description

This PR addresses the compatibility issue with Vue's Vapor mode where getCurrentInstance() returns null, causing provideLocal and injectLocal to fail. The key changes are:

  1. Added fallback to getCurrentScope() when component instance is unavailable, ensuring proper context resolution in Vapor mode
  2. Unified the owner lookup logic between provideLocal and injectLocal for consistency
  3. Updated localProvidedStateMap to support both component proxies and effect scopes as keys

These changes maintain backward compatibility with traditional Vue components while adding support for Vapor mode, where component instances may not be available but effect scopes still provide valid context.

Additional context

The primary focus of this PR is to maintain the functionality of local injection APIs in environments where component instances aren't available, specifically Vue's new Vapor rendering mode. By using effect scopes as a fallback, we ensure the local provide/inject pattern works consistently across both rendering modes.

Testing should verify:

  • Existing functionality remains intact in traditional Vue components
  • Proper operation in Vapor mode components
  • Correct scoping of provided values when using effect scopes directly

This fix closes #4875 by addressing the root cause of the instance check failure in Vapor mode.

  - fall back to current effect scope when component instance is missing
  - share the same owner lookup between provideLocal and injectLocal
  - allow localProvidedStateMap to key off either component proxies or scopes
scopesCloses vueuse#4875

Signed-off-by: Zhaokun Zhang <[email protected]>
@dosubot dosubot bot added the size:S This PR changes 10-29 lines, ignoring generated files. label Sep 20, 2025
@dosubot dosubot bot added the lgtm This PR has been approved by a maintainer label Sep 20, 2025
@antfu antfu enabled auto-merge September 20, 2025 21:13
@pkg-pr-new
Copy link

pkg-pr-new bot commented Sep 20, 2025

Open in StackBlitz

@vueuse/components

npm i https://pkg.pr.new/@vueuse/components@5050

@vueuse/core

npm i https://pkg.pr.new/@vueuse/core@5050

@vueuse/electron

npm i https://pkg.pr.new/@vueuse/electron@5050

@vueuse/firebase

npm i https://pkg.pr.new/@vueuse/firebase@5050

@vueuse/integrations

npm i https://pkg.pr.new/@vueuse/integrations@5050

@vueuse/math

npm i https://pkg.pr.new/@vueuse/math@5050

@vueuse/metadata

npm i https://pkg.pr.new/@vueuse/metadata@5050

@vueuse/nuxt

npm i https://pkg.pr.new/@vueuse/nuxt@5050

@vueuse/router

npm i https://pkg.pr.new/@vueuse/router@5050

@vueuse/rxjs

npm i https://pkg.pr.new/@vueuse/rxjs@5050

@vueuse/shared

npm i https://pkg.pr.new/@vueuse/shared@5050

commit: 6dcdfb1

@antfu antfu added this pull request to the merge queue Sep 20, 2025
Merged via the queue into vueuse:main with commit 5187294 Sep 20, 2025
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

lgtm This PR has been approved by a maintainer size:S This PR changes 10-29 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

BUG | provideLocal and injectLocal | In Vue's vapor mode, getCurrentInstance returns null

2 participants