Skip to content

onBeforeNavigate not invoked after redirect within beforeLoad method was invoked #3920

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
dschu-lab opened this issue Apr 2, 2025 · 2 comments

Comments

@dschu-lab
Copy link

dschu-lab commented Apr 2, 2025

Which project does this relate to?

Router

Describe the bug

When using throw redirect() within a beforeLoad function, subsequent router.subscribe("onBeforeNavigate") events may fail to trigger, causing potential data loss for components that rely on this event for cleanup or persistence operations.

Your Example Website or App

https://github.com/dschu-lab/tanstack-router-onbeforeload-redirect-issue

Steps to Reproduce the Bug or Issue

  • Start with an unauthenticated state
  • Authenticate user (which triggers a redirect() in beforeLoad)
  • Navigate to a page with onBeforeNavigate subscriptions
  • Attempt to navigate away from this page
  • Expected onBeforeNavigate event is not triggered

Subscription to the event is implemented at:
https://github.com/dschu-lab/tanstack-router-onbeforeload-redirect-issue/blob/2eb4bd98e7be565983eb7bac8c889859e51da8f3/src/components/PersistForm/PersistForm.tsx#L44-L51

Expected behavior

The onBeforeNavigate event should consistently trigger regardless of whether a redirect() was previously thrown in a beforeLoad or loader function.

Screenshots or Videos

Bildschirmaufnahme.2025-04-02.um.16.46.05.mp4

Platform

  • OS: macOS 15.3.2
  • Browser: Chrome
  • Version: 134.0

Additional context

No response

@schiller-manuel
Copy link
Contributor

looks like the redirect state is never reset and thus the event is not emitted anymore
https://github.com/TanStack/router/blob/f8015e7629307499d4d6245077ad84145b6064a7/packages/router-core/src/router.ts#L2017C16-L2017C35

@dschu-lab
Copy link
Author

looks like the redirect state is never reset and thus the event is not emitted anymore https://github.com/TanStack/router/blob/f8015e7629307499d4d6245077ad84145b6064a7/packages/router-core/src/router.ts#L2017C16-L2017C35

Thank you for confirming this observation by finding the possible root cause. 🙏

For now we'll set reloadDocument: true when using redirect() within beforeLoad in our SPA as a workaround to bypass this issue.

I would like to submit a fix for this myself, but could not figure out when the redirect state is set and when exactly it should be cleared again. 🙈

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants