Skip to content

Commit 587d08f

Browse files
Release v7.15.1 (#15038)
Co-authored-by: Remix Run Bot <hello@remix.run>
1 parent 89996bd commit 587d08f

30 files changed

Lines changed: 212 additions & 58 deletions

CHANGELOG.md

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,10 @@ We manage release notes in this file instead of the paginated Github Releases Pa
1313
<summary>Table of Contents</summary>
1414

1515
- [React Router Releases](#react-router-releases)
16+
- [v7.15.1](#v7151)
1617
- [v7.15.0](#v7150)
18+
- [Stabilizations](#stabilizations)
19+
- [Route matching optimizations](#route-matching-optimizations)
1720
- [v7.14.2](#v7142)
1821
- [v7.14.1](#v7141)
1922
- [v7.14.0](#v7140)
@@ -170,6 +173,72 @@ We manage release notes in this file instead of the paginated Github Releases Pa
170173

171174
</details>
172175

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
219+
active.location; // replaces `useLocation()`
220+
active.searchParams; // replaces `useSearchParams()[0]`
221+
active.params; // replaces `useParams()`
222+
active.matches; // replaces `useMatches()`
223+
active.type; // replaces `useNavigationType()`
224+
225+
// Pending is only populated during a navigation
226+
pending.location; // replaces `useNavigation().location`
227+
pending.searchParams; // equivalent to `new URLSearchParams(useNavigation().search)`
228+
pending.params; // Not directly accessible today
229+
pending.matches; // Not directly accessible today
230+
pending.type; // Not directly accessible today
231+
pending.state; // replaces `useNavigation().state`
232+
pending.formMethod; // replaces useNavigation().formMethod
233+
pending.formAction; // replaces useNavigation().formAction
234+
pending.formEncType; // replaces useNavigation().formEncType
235+
pending.formData; // replaces useNavigation().formData
236+
pending.json; // replaces useNavigation().json
237+
pending.text; // replaces useNavigation().text
238+
```
239+
240+
**Full Changelog**: [`v7.15.0...v7.15.1`](https://github.com/remix-run/react-router/compare/react-router@7.15.0...react-router@7.15.1)
241+
173242
## v7.15.0
174243

175244
Date: 2026-05-05

packages/create-react-router/CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# `create-react-router`
22

3+
## v7.15.1
4+
5+
### Patch Changes
6+
7+
- _No changes_
8+
39
## v7.15.0
410

511
### Patch Changes

packages/create-react-router/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "create-react-router",
3-
"version": "7.15.0",
3+
"version": "7.15.1",
44
"description": "Create a new React Router app",
55
"homepage": "https://reactrouter.com",
66
"bugs": {

packages/react-router-architect/CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
# `@react-router/architect`
22

3+
## v7.15.1
4+
5+
### Patch Changes
6+
7+
- Updated dependencies:
8+
- [`react-router@7.15.1`](https://github.com/remix-run/react-router/releases/tag/react-router@7.15.1)
9+
- [`@react-router/node@7.15.1`](https://github.com/remix-run/react-router/releases/tag/@react-router/node@7.15.1)
10+
311
## v7.15.0
412

513
### Patch Changes

packages/react-router-architect/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@react-router/architect",
3-
"version": "7.15.0",
3+
"version": "7.15.1",
44
"description": "Architect server request handler for React Router",
55
"bugs": {
66
"url": "https://github.com/remix-run/react-router/issues"

packages/react-router-cloudflare/CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
# `@react-router/cloudflare`
22

3+
## v7.15.1
4+
5+
### Patch Changes
6+
7+
- Updated dependencies:
8+
- [`react-router@7.15.1`](https://github.com/remix-run/react-router/releases/tag/react-router@7.15.1)
9+
310
## v7.15.0
411

512
### Patch Changes

packages/react-router-cloudflare/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@react-router/cloudflare",
3-
"version": "7.15.0",
3+
"version": "7.15.1",
44
"description": "Cloudflare platform abstractions for React Router",
55
"bugs": {
66
"url": "https://github.com/remix-run/react-router/issues"

packages/react-router-dev/.changes/patch.fix-basename-app-directory-conflict.md

Lines changed: 0 additions & 7 deletions
This file was deleted.

packages/react-router-dev/CHANGELOG.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,21 @@
11
# `@react-router/dev`
22

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.
14+
- Updated dependencies:
15+
- [`react-router@7.15.1`](https://github.com/remix-run/react-router/releases/tag/react-router@7.15.1)
16+
- [`@react-router/node@7.15.1`](https://github.com/remix-run/react-router/releases/tag/@react-router/node@7.15.1)
17+
- [`@react-router/serve@7.15.1`](https://github.com/remix-run/react-router/releases/tag/@react-router/serve@7.15.1)
18+
319
## v7.15.0
420

521
### Minor Changes

packages/react-router-dev/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@react-router/dev",
3-
"version": "7.15.0",
3+
"version": "7.15.1",
44
"description": "Dev tools and CLI for React Router",
55
"homepage": "https://reactrouter.com",
66
"bugs": {

0 commit comments

Comments
 (0)