mirror of
https://github.com/hanzoai/next.js.git
synced 2026-09-24 17:00:51 +00:00
### What Actions that revalidate the router state by kicking off a refetch (such as `router.refresh()` or dev fast refresh) would incorrectly trigger an interception route if one matched the current URL, or in the case of already being on an intercepted route, would trigger the full detail page instead. ### Why Interception rewrites use the `nextUrl` header to determine if the requested path should be rewritten to a different path. We currently forward that header indiscriminately, which means that if you were on a non-intercepted route and called `router.refresh()`, the UI would change to the intercepted content instead (since it would treat it the same as a soft-navigation). ### How This updates various reducers to only forward the `nextUrl` header if there's an interception route present in the tree. If there is, we want to refresh its data, rather than the data for the underlying page. The reverse is also true: if we were on the "full" page, and triggered a `router.refresh()`, we won't forward `nextUrl` meaning it won't fetch the interception data. In order to determine if an interception route is present in the tree, I had to add a new segment type for dynamic interception routes, as by the time they reach the client they are stripped of their interception marker. **Note: There are a series of bugs related to `router.refresh` with parallel/interception routes, such as the previous page/slot content disappearing when triggering a refresh. This does not address all of those cases, but I'm working through them!** Fixes #60844 Fixes #62470 Closes NEXT-2737