You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@@ -170,6 +173,72 @@ We manage release notes in this file instead of the paginated Github Releases Pa
170
173
171
174
</details>
172
175
176
+
## v7.15.1
177
+
178
+
Date: 2026-05-13
179
+
180
+
### Patch Changes
181
+
182
+
- `react-router` - Update router to operate on fetcher Maps in an immutable manner to avoid delayed React renders from potentially reading an updated but not yet committed Map. This could result in brief flickers in some fetcher-driven optimistic UI scenarios. ([#15028](https://github.com/remix-run/react-router/pull/15028))
183
+
184
+
- `react-router` - Fix `serverLoader()` returning stale SSR data when a client navigation aborts pending hydration before the hydration `clientLoader` resolves ([#15022](https://github.com/remix-run/react-router/pull/15022))
185
+
186
+
- `react-router` - Fix `RouterProvider` `onError` callback not being called for synchronous initial loader errors in SPA mode ([#15039](https://github.com/remix-run/react-router/pull/15039)) ([#14942](https://github.com/remix-run/react-router/pull/14942))
187
+
188
+
- `react-router` - Memoize `useFetchers` to return a stable identity and only change if fetchers changed ([#15028](https://github.com/remix-run/react-router/pull/15028))
189
+
190
+
- `react-router` - Internal refactor to consolidate mutation request detection through shared utility ([#15033](https://github.com/remix-run/react-router/pull/15033))
191
+
192
+
- `@react-router/dev` - Fix `basename` conflicting with `app` directory name when Vite `base` is set ([#15027](https://github.com/remix-run/react-router/pull/15027))
193
+
194
+
When the Vite `base` config and React Router `basename` both match the
195
+
app directory name (e.g. `base: "/app/"`, `basename: "/app/"`), Vite would
196
+
strip the base prefix from server-build virtual module import paths, causing
197
+
"Failed to load url /root.tsx" errors. The fix uses `/@fs/` absolute paths
198
+
for those imports to bypass Vite's base-stripping logic.
199
+
200
+
### Unstable Changes
201
+
202
+
⚠️ _[Unstable features](https://reactrouter.com/community/api-development-strategy#unstable-flags) are not recommended for production use_
203
+
204
+
- `react-router` - Add a new `unstable_useRouterState()` hook that consolidates access to active and pending router states (RFC: #12358) ([#15017](https://github.com/remix-run/react-router/pull/15017))
205
+
206
+
- Data/Framework/RSC only — throws when used without a data router
207
+
- This should allow you to consolidate usages of the following hooks which will likely be deprecated and removed in a future major version
208
+
- `useLocation`
209
+
- `useSearchParams`
210
+
- `useParams`
211
+
- `useMatches`
212
+
- `useNavigationType`
213
+
- `useNavigation`
214
+
215
+
```ts
216
+
let { active, pending } = unstable_useRouterState();
217
+
218
+
// Active is always populated with the current location
Copy file name to clipboardExpand all lines: packages/react-router-dev/CHANGELOG.md
+16Lines changed: 16 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,5 +1,21 @@
1
1
# `@react-router/dev`
2
2
3
+
## v7.15.1
4
+
5
+
### Patch Changes
6
+
7
+
- Fix `basename` conflicting with `app` directory name when Vite `base` is set ([#15027](https://github.com/remix-run/react-router/pull/15027))
8
+
9
+
When the Vite `base` config and React Router `basename` both match the
10
+
app directory name (e.g. `base: "/app/"`, `basename: "/app/"`), Vite would
11
+
strip the base prefix from server-build virtual module import paths, causing
12
+
"Failed to load url /root.tsx" errors. The fix uses `/@fs/` absolute paths
13
+
for those imports to bypass Vite's base-stripping logic.
0 commit comments