Repository navigation
Closed
Description
Which project does this relate to?
Router
Describe the bug
This is a bit of a complicated one, but I think I've found a race condition where an undefined is thrown inside the <MatchInnerImpl> component after a beforeLoad redirect that causes the routes to fail to display.
It only fails on first load, and usually a refresh or HMR will fix it.
I only wrote this because some of these exact conditions were met in a private work repository and it took me 2 hours to create a stable reproduction.
Stack Trace
defaultOnUncaughtError @ react-dom_client.js?v=be4189c8:5256
logUncaughtError @ react-dom_client.js?v=be4189c8:5286
runWithFiberInDEV @ react-dom_client.js?v=be4189c8:850
lane.callback @ react-dom_client.js?v=be4189c8:5314
callCallback @ react-dom_client.js?v=be4189c8:4094
commitCallbacks @ react-dom_client.js?v=be4189c8:4102
runWithFiberInDEV @ react-dom_client.js?v=be4189c8:850
commitLayoutEffectOnFiber @ react-dom_client.js?v=be4189c8:6985
flushLayoutEffects @ react-dom_client.js?v=be4189c8:8670
commitRoot @ react-dom_client.js?v=be4189c8:8583
commitRootWhenReady @ react-dom_client.js?v=be4189c8:8078
performWorkOnRoot @ react-dom_client.js?v=be4189c8:8050
performWorkOnRootViaSchedulerTask @ react-dom_client.js?v=be4189c8:9058
performWorkUntilDeadline @ react-dom_client.js?v=be4189c8:35
<MatchInnerImpl>
exports.jsx @ react_jsx-runtime.js?v=eeebbf31:192
MatchView @ @tanstack_react-rout….js?v=9b2a07b8:6384
react_stack_bottom_frame @ react-dom_client.js?v=be4189c8:12867
renderWithHooksAgain @ react-dom_client.js?v=be4189c8:4267
renderWithHooks @ react-dom_client.js?v=be4189c8:4218
updateFunctionComponent @ react-dom_client.js?v=be4189c8:5568
beginWork @ react-dom_client.js?v=be4189c8:6139
runWithFiberInDEV @ react-dom_client.js?v=be4189c8:850
performUnitOfWork @ react-dom_client.js?v=be4189c8:8428
workLoopSync @ react-dom_client.js?v=be4189c8:8324
renderRootSync @ react-dom_client.js?v=be4189c8:8308
performWorkOnRoot @ react-dom_client.js?v=be4189c8:7993
performWorkOnRootViaSchedulerTask @ react-dom_client.js?v=be4189c8:9058
performWorkUntilDeadline @ react-dom_client.js?v=be4189c8:35
<MatchView>
exports.jsx @ react_jsx-runtime.js?v=eeebbf31:192
MatchImpl @ @tanstack_react-rout….js?v=9b2a07b8:6328
react_stack_bottom_frame @ react-dom_client.js?v=be4189c8:12867
renderWithHooksAgain @ react-dom_client.js?v=be4189c8:4267
renderWithHooks @ react-dom_client.js?v=be4189c8:4218
updateFunctionComponent @ react-dom_client.js?v=be4189c8:5568
updateSimpleMemoComponent @ react-dom_client.js?v=be4189c8:5431
updateMemoComponent @ react-dom_client.js?v=be4189c8:5406
beginWork @ react-dom_client.js?v=be4189c8:6209
runWithFiberInDEV @ react-dom_client.js?v=be4189c8:850
performUnitOfWork @ react-dom_client.js?v=be4189c8:8428
workLoopSync @ react-dom_client.js?v=be4189c8:8324
renderRootSync @ react-dom_client.js?v=be4189c8:8308
performWorkOnRoot @ react-dom_client.js?v=be4189c8:7993
performWorkOnRootViaSchedulerTask @ react-dom_client.js?v=be4189c8:9058
performWorkUntilDeadline @ react-dom_client.js?v=be4189c8:35
<MatchImpl>
exports.jsx @ react_jsx-runtime.js?v=eeebbf31:192
MatchesInner @ @tanstack_react-rout….js?v=9b2a07b8:6671
react_stack_bottom_frame @ react-dom_client.js?v=be4189c8:12867
renderWithHooksAgain @ react-dom_client.js?v=be4189c8:4267
renderWithHooks @ react-dom_client.js?v=be4189c8:4218
updateFunctionComponent @ react-dom_client.js?v=be4189c8:5568
beginWork @ react-dom_client.js?v=be4189c8:6139
runWithFiberInDEV @ react-dom_client.js?v=be4189c8:850
performUnitOfWork @ react-dom_client.js?v=be4189c8:8428
workLoopSync @ react-dom_client.js?v=be4189c8:8324
renderRootSync @ react-dom_client.js?v=be4189c8:8308
performWorkOnRoot @ react-dom_client.js?v=be4189c8:7993
performWorkOnRootViaSchedulerTask @ react-dom_client.js?v=be4189c8:9058
performWorkUntilDeadline @ react-dom_client.js?v=be4189c8:35
<MatchesInner>
exports.jsx @ react_jsx-runtime.js?v=eeebbf31:192
Matches @ @tanstack_react-rout….js?v=9b2a07b8:6662
react_stack_bottom_frame @ react-dom_client.js?v=be4189c8:12867
renderWithHooksAgain @ react-dom_client.js?v=be4189c8:4267
renderWithHooks @ react-dom_client.js?v=be4189c8:4218
updateFunctionComponent @ react-dom_client.js?v=be4189c8:5568
beginWork @ react-dom_client.js?v=be4189c8:6139
runWithFiberInDEV @ react-dom_client.js?v=be4189c8:850
performUnitOfWork @ react-dom_client.js?v=be4189c8:8428
workLoopSync @ react-dom_client.js?v=be4189c8:8324
renderRootSync @ react-dom_client.js?v=be4189c8:8308
performWorkOnRoot @ react-dom_client.js?v=be4189c8:7956
performWorkOnRootViaSchedulerTask @ react-dom_client.js?v=be4189c8:9058
performWorkUntilDeadline @ react-dom_client.js?v=be4189c8:35
<Matches>
exports.jsx @ react_jsx-runtime.js?v=eeebbf31:192
RouterProvider @ @tanstack_react-rout….js?v=9b2a07b8:6848
react_stack_bottom_frame @ react-dom_client.js?v=be4189c8:12867
renderWithHooksAgain @ react-dom_client.js?v=be4189c8:4267
renderWithHooks @ react-dom_client.js?v=be4189c8:4218
updateFunctionComponent @ react-dom_client.js?v=be4189c8:5568
beginWork @ react-dom_client.js?v=be4189c8:6139
runWithFiberInDEV @ react-dom_client.js?v=be4189c8:850
performUnitOfWork @ react-dom_client.js?v=be4189c8:8428
workLoopSync @ react-dom_client.js?v=be4189c8:8324
renderRootSync @ react-dom_client.js?v=be4189c8:8308
performWorkOnRoot @ react-dom_client.js?v=be4189c8:7956
performWorkOnRootViaSchedulerTask @ react-dom_client.js?v=be4189c8:9058
performWorkUntilDeadline @ react-dom_client.js?v=be4189c8:35
<RouterProvider>
exports.jsxDEV @ react_jsx-dev-runtime.js?v=eeebbf31:192
(anonymous) @ main.tsx:59
Complete minimal reproducer
Steps to Reproduce the Bug
- Open link
- Page fails to load
- Open console
- Check error stack trace
Expected behavior
Should not be throwing an undefined and fail to render the page
Screenshots or Videos
No response
Platform
- Router / Start Version: 1.170.5
- OS: Any
- Browser: Chrome
- Browser Version: 148.0.7778.168
- Bundler: vite
- Bundler Version: 8.0.13
Additional context
No response
Reacted by spark-altoira, Gilbert Wong, Paul Sachs, Melissa Chen, Melvin Valster and yahya-evoly
Metadata
Metadata
Assignees
Labels
No labels
Activity
codeart1st commentedon May 21, 2026
#7120
spark-altoira commentedon May 29, 2026
Confirming this is reproducible on an older minor too — hitting it on @tanstack/[email protected] + @tanstack/[email protected] (Vite), so it's not specific to 1.170.x.
Scenario
File-based routing with this structure:
Direct hard-load of /parent/onboarding. The parent's async beforeLoad populates context, then the onboarding route's beforeLoad reads it and redirects back to /parent (a sibling under the same shared /parent + _authenticated parents). On first load this throws undefined; subsequent in-app navigations are fine, consistent with what @ryanagillie observed.
Stack Trace
Platform
jamesknelson commentedon Jun 10, 2026
As a workaround for what I think is the same issue, I'm imperatively calling the deprecated
navigatefunction in abeforeLoadinstead of throwing a redirect.fix: match loading
fix: match loading
fix: match loading
fix: match loading
fix: match loading
fix: match loading
test: pin 24 community-reported issues fixed by the match-loading wor…
xofromthemoon commentedon Jul 27, 2026
Running into the same bug :(
fix(web): patch tanstack router redirect race throwing undefined (#2553)
fix(web): upgrade @tanstack/react-router to 1.170.20, remove vendor p…