diff --git a/.changeset/pre.json b/.changeset/pre.json index 6402419547..b0cd1e7161 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -14,6 +14,7 @@ "beige-buckets-lick", "big-bags-report", "brave-shirts-sneeze", + "calm-lies-destroy", "chilled-beers-sell", "cuddly-dingos-tickle", "dirty-ladybugs-grow", @@ -33,6 +34,7 @@ "ninety-spoons-suffer", "odd-yaks-kneel", "red-sheep-push", + "shy-guests-tickle", "silver-planes-relate", "sixty-otters-teach", "slimy-pugs-sip", diff --git a/.changeset/shy-guests-tickle.md b/.changeset/shy-guests-tickle.md index f732713ddd..5c125706db 100644 --- a/.changeset/shy-guests-tickle.md +++ b/.changeset/shy-guests-tickle.md @@ -3,4 +3,4 @@ "@remix-run/router": patch --- -fix: Avoid suspense loops on promise aborted values +fix: Avoid suspense loops on promise aborted values (#9226) diff --git a/packages/react-router-dom-v5-compat/CHANGELOG.md b/packages/react-router-dom-v5-compat/CHANGELOG.md index 5a2a015a15..8d67b5f1b8 100644 --- a/packages/react-router-dom-v5-compat/CHANGELOG.md +++ b/packages/react-router-dom-v5-compat/CHANGELOG.md @@ -1,5 +1,13 @@ # react-router-dom-v5-compat +## 6.4.0-pre.15 + +### Patch Changes + +- Updated dependencies + - react-router@6.4.0-pre.15 + - react-router-dom@6.4.0-pre.15 + ## 6.4.0-pre.14 ### Patch Changes diff --git a/packages/react-router-dom-v5-compat/package.json b/packages/react-router-dom-v5-compat/package.json index 0142b3f00d..903ab0b5db 100644 --- a/packages/react-router-dom-v5-compat/package.json +++ b/packages/react-router-dom-v5-compat/package.json @@ -1,6 +1,6 @@ { "name": "react-router-dom-v5-compat", - "version": "6.4.0-pre.14", + "version": "6.4.0-pre.15", "description": "Migration path to React Router v6 from v4/5", "keywords": [ "react", @@ -24,7 +24,7 @@ "types": "./dist/index.d.ts", "dependencies": { "history": "^5.3.0", - "react-router": "6.4.0-pre.14" + "react-router": "6.4.0-pre.15" }, "peerDependencies": { "react": ">=16.8", diff --git a/packages/react-router-dom/CHANGELOG.md b/packages/react-router-dom/CHANGELOG.md index 2e083d502c..f7573411ec 100644 --- a/packages/react-router-dom/CHANGELOG.md +++ b/packages/react-router-dom/CHANGELOG.md @@ -1,5 +1,93 @@ # react-router-dom +## 6.4.0-pre.15 + +### Patch Changes + +- fix: remove internal router singleton (#9227) + + This change removes the internal module-level `routerSingleton` we create and maintain inside our data routers since it was causing a number of headaches for non-simple use cases: + + - Unit tests are a pain because you need to find a way to reset the singleton in-between tests + - Use use a `_resetModuleScope` singleton for our tests + - ...but this isn't exposed to users who may want to do their own tests around our router + - The JSX children `` objects cause non-intuitive behavior based on idiomatic react expectations + - Conditional runtime ``'s won't get picked up + - Adding new ``'s during local dev won't get picked up during HMR + - Using external state in your elements doesn't work as one might expect (see #9225) + + Instead, we are going to lift the singleton out into user-land, so that they create the router singleton and manage it outside the react tree - which is what react 18 is encouraging with `useSyncExternalStore` anyways! This also means that since users create the router - there's no longer any difference in the rendering aspect for memory/browser/hash routers (which only impacts router/history creation) - so we can get rid of those and trim to a simple `RouterProvider` + + ```jsx + // Before + function App() { + + }> + }> + + + } + + // After + let router = createBrowserRouter([{ + path: "/", + element: , + children: [{ + index: true, + element: , + }] + }]); + + function App() { + return + } + ``` + + If folks still prefer the JSX notation, they can leverage `createRoutesFromElements` (aliased from `createRoutesFromChildren` since they are not "children" in this usage): + + ```jsx + let routes = createRoutesFromElements( + }> + }> + + ); + let router = createBrowserRouter(routes); + + function App() { + return + } + ``` + + And now they can also hook into HMR correctly for router disposal: + + ``` + if (import.meta.hot) { + import.meta.hot.dispose(() => router.dispose()); + } + ``` + + And finally since `` accepts a router, it makes unit testing easer since you can create a fresh router with each test. + + **Removed APIs** + + - `` + - `` + - `` + - `` + - `` + + **Modified APIs** + + - `createMemoryRouter`/`createBrowserRouter`/`createHashRouter` used to live in `@remix-run/router` to prevent devs from needing to create their own `history`. These are now moved to `react-router`/`react-router-dom` and handle the `RouteObject -> AgnosticRouteObject` conversion. + + **Added APIs** + + - `` + - `createRoutesFromElements` (alias of `createRoutesFromChildren`) + +- Updated dependencies + - react-router@6.4.0-pre.15 + ## 6.4.0-pre.14 ### Patch Changes diff --git a/packages/react-router-dom/package.json b/packages/react-router-dom/package.json index 7a6cd11aa1..5812250acf 100644 --- a/packages/react-router-dom/package.json +++ b/packages/react-router-dom/package.json @@ -1,6 +1,6 @@ { "name": "react-router-dom", - "version": "6.4.0-pre.14", + "version": "6.4.0-pre.15", "description": "Declarative routing for React web applications", "keywords": [ "react", @@ -23,7 +23,7 @@ "module": "./dist/index.js", "types": "./dist/index.d.ts", "dependencies": { - "react-router": "6.4.0-pre.14" + "react-router": "6.4.0-pre.15" }, "devDependencies": { "react": "^18.2.0", diff --git a/packages/react-router-native/CHANGELOG.md b/packages/react-router-native/CHANGELOG.md index 7b2147959e..4e6fa82e2b 100644 --- a/packages/react-router-native/CHANGELOG.md +++ b/packages/react-router-native/CHANGELOG.md @@ -1,5 +1,12 @@ # react-router-native +## 6.4.0-pre.15 + +### Patch Changes + +- Updated dependencies + - react-router@6.4.0-pre.15 + ## 6.4.0-pre.14 ### Patch Changes diff --git a/packages/react-router-native/package.json b/packages/react-router-native/package.json index cb850a0ef6..fa4793a54f 100644 --- a/packages/react-router-native/package.json +++ b/packages/react-router-native/package.json @@ -1,6 +1,6 @@ { "name": "react-router-native", - "version": "6.4.0-pre.14", + "version": "6.4.0-pre.15", "description": "Declarative routing for React Native applications", "keywords": [ "react", @@ -22,7 +22,7 @@ "types": "./dist/index.d.ts", "dependencies": { "@ungap/url-search-params": "^0.1.4", - "react-router": "6.4.0-pre.14" + "react-router": "6.4.0-pre.15" }, "devDependencies": { "react": "^18.2.0", diff --git a/packages/react-router/CHANGELOG.md b/packages/react-router/CHANGELOG.md index 1f46778758..543dd2245d 100644 --- a/packages/react-router/CHANGELOG.md +++ b/packages/react-router/CHANGELOG.md @@ -1,5 +1,14 @@ # react-router +## 6.4.0-pre.15 + +### Patch Changes + +- fix: remove internal router singleton (#9227) +- fix: Avoid suspense loops on promise aborted values (#9226) +- Updated dependencies + - @remix-run/router@0.2.0-pre.10 + ## 6.4.0-pre.14 ### Patch Changes diff --git a/packages/react-router/package.json b/packages/react-router/package.json index 3d5385278d..5ab17cd2bf 100644 --- a/packages/react-router/package.json +++ b/packages/react-router/package.json @@ -1,6 +1,6 @@ { "name": "react-router", - "version": "6.4.0-pre.14", + "version": "6.4.0-pre.15", "description": "Declarative routing for React", "keywords": [ "react", @@ -23,7 +23,7 @@ "module": "./dist/index.js", "types": "./dist/index.d.ts", "dependencies": { - "@remix-run/router": "0.2.0-pre.9" + "@remix-run/router": "0.2.0-pre.10" }, "devDependencies": { "react": "^18.2.0" diff --git a/packages/router/CHANGELOG.md b/packages/router/CHANGELOG.md index 26bac5113b..fd1aded0d8 100644 --- a/packages/router/CHANGELOG.md +++ b/packages/router/CHANGELOG.md @@ -1,5 +1,12 @@ # @remix-run/router +## 0.2.0-pre.10 + +### Patch Changes + +- fix: remove internal router singleton (#9227) +- fix: Avoid suspense loops on promise aborted values (#9226) + ## 0.2.0-pre.9 ### Patch Changes diff --git a/packages/router/package.json b/packages/router/package.json index e8b409c8d5..d7befdfe30 100644 --- a/packages/router/package.json +++ b/packages/router/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/router", - "version": "0.2.0-pre.9", + "version": "0.2.0-pre.10", "description": "Nested/Data-driven/Framework-agnostic Routing", "keywords": [ "remix",