Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/api/framework-conventions/react-router.config.ts.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ order: 3
This file is optional
</docs-info>

[Reference Documentation ↗](https://api.reactrouter.com/v7/types/_react_router_dev.config.Config.html)
[Reference Documentation ↗](https://api.reactrouter.com/v7/types/_react-router_dev.config.Config.html)

React Router framework configuration file that lets you customize aspects of your React Router application like server-side rendering, directory locations, and build settings.

Expand Down
12 changes: 6 additions & 6 deletions docs/api/framework-conventions/routes.ts.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ order: 2
This file is required
</docs-info>

[Reference Documentation ↗](https://api.reactrouter.com/v7/interfaces/_react_router_dev.routes.RouteConfigEntry.html)
[Reference Documentation ↗](https://api.reactrouter.com/v7/interfaces/_react-router_dev.routes.RouteConfigEntry.html)

Configuration file that maps URL patterns to route modules in your application.

Expand Down Expand Up @@ -59,9 +59,9 @@ export default flatRoutes() satisfies RouteConfig;
### Route Helpers

[routing]: ../../start/framework/routing
[route]: https://api.reactrouter.com/v7/functions/_react_router_dev.routes.route.html
[index]: https://api.reactrouter.com/v7/functions/_react_router_dev.routes.index.html
[layout]: https://api.reactrouter.com/v7/functions/_react_router_dev.routes.layout.html
[prefix]: https://api.reactrouter.com/v7/functions/_react_router_dev.routes.prefix.html
[relative]: https://api.reactrouter.com/v7/functions/_react_router_dev.routes.relative.html
[route]: https://api.reactrouter.com/v7/functions/_react-router_dev.routes.route.html
[index]: https://api.reactrouter.com/v7/functions/_react-router_dev.routes.index.html
[layout]: https://api.reactrouter.com/v7/functions/_react-router_dev.routes.layout.html
[prefix]: https://api.reactrouter.com/v7/functions/_react-router_dev.routes.prefix.html
[relative]: https://api.reactrouter.com/v7/functions/_react-router_dev.routes.relative.html
[file-route-conventions]: ../../how-to/file-route-conventions
6 changes: 3 additions & 3 deletions docs/api/other-api/adapter.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ Each adapter has the same API. In the future, we may have helpers specific to th

## `@react-router/express`

[Reference Documentation ↗](https://api.reactrouter.com/v7/modules/_react_router_express.html)
[Reference Documentation ↗](https://api.reactrouter.com/v7/modules/_react-router_express.html)

Here's an example with [Express][express]:

Expand Down Expand Up @@ -122,7 +122,7 @@ Update the `dev` and `start` scripts to use your new Express server:

## `@react-router/cloudflare`

[Reference Documentation ↗](https://api.reactrouter.com/v7/modules/_react_router_cloudflare.html)
[Reference Documentation ↗](https://api.reactrouter.com/v7/modules/_react-router_cloudflare.html)

Here's an example with Cloudflare:

Expand Down Expand Up @@ -156,7 +156,7 @@ export default {

While not a direct "adapter" like the above, this package contains utilities for working with Node-based adapters.

[Reference Documentation ↗](https://api.reactrouter.com/v7/modules/_react_router_node.html)
[Reference Documentation ↗](https://api.reactrouter.com/v7/modules/_react-router_node.html)

### Node Version Support

Expand Down
2 changes: 1 addition & 1 deletion docs/api/utils/IsCookieFunction.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,4 @@ title: IsCookieFunction

## Summary

[Reference Documentation ↗](https://api.reactrouter.com/v7/functions/react_router.IsCookieFunction.html)
[Reference Documentation ↗](https://api.reactrouter.com/v7/functions/react-router.IsCookieFunction.html)
2 changes: 1 addition & 1 deletion docs/api/utils/IsSessionFunction.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,4 @@ title: IsSessionFunction

## Summary

[Reference Documentation ↗](https://api.reactrouter.com/v7/functions/react_router.IsSessionFunction.html)
[Reference Documentation ↗](https://api.reactrouter.com/v7/functions/react-router.IsSessionFunction.html)
2 changes: 1 addition & 1 deletion docs/api/utils/createCookie.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,6 @@ title: createCookie

## Summary

[Reference Documentation ↗](https://api.reactrouter.com/v7/functions/react_router.createCookie.html)
[Reference Documentation ↗](https://api.reactrouter.com/v7/functions/react-router.createCookie.html)

Creates a logical container for managing a browser cookie from the server.
2 changes: 1 addition & 1 deletion docs/api/utils/createCookieSessionStorage.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ title: createCookieSessionStorage

## Summary

[Reference Documentation ↗](https://api.reactrouter.com/v7/functions/react_router.createCookieSessionStorage.html)
[Reference Documentation ↗](https://api.reactrouter.com/v7/functions/react-router.createCookieSessionStorage.html)

Creates and returns a SessionStorage object that stores all session data
directly in the session cookie itself.
Expand Down
2 changes: 1 addition & 1 deletion docs/api/utils/createMemorySessionStorage.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ title: createMemorySessionStorage

## Summary

[Reference Documentation ↗](https://api.reactrouter.com/v7/functions/react_router.createMemorySessionStorage.html)
[Reference Documentation ↗](https://api.reactrouter.com/v7/functions/react-router.createMemorySessionStorage.html)

Creates and returns a simple in-memory SessionStorage object, mostly useful
for testing and as a reference implementation.
Expand Down
7 changes: 2 additions & 5 deletions docs/api/utils/createPath.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,10 @@ title: createPath

## Summary

[Reference Documentation ↗](https://api.reactrouter.com/v7/functions/react_router.createPath.html)
[Reference Documentation ↗](https://api.reactrouter.com/v7/functions/react-router.createPath.html)

Creates a string URL path from the given pathname, search, and hash components.



## Signature

```tsx
Expand All @@ -22,9 +20,8 @@ createPath(__namedParameters): string

## Params

### __namedParameters
### \_\_namedParameters

[modes: framework, data, declarative]

_No documentation_

3 changes: 1 addition & 2 deletions docs/api/utils/createRequestHandler.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,4 @@ hidden: true

## Summary

[Reference Documentation ↗](https://api.reactrouter.com/v7/functions/react_router.createRequestHandler.html)

[Reference Documentation ↗](https://api.reactrouter.com/v7/functions/react-router.createRequestHandler.html)
2 changes: 1 addition & 1 deletion docs/api/utils/createRoutesStub.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ title: createRoutesStub

## Summary

[Reference Documentation ↗](https://api.reactrouter.com/v7/functions/react_router.createRoutesStub.html)
[Reference Documentation ↗](https://api.reactrouter.com/v7/functions/react-router.createRoutesStub.html)

## Signature

Expand Down
2 changes: 1 addition & 1 deletion docs/api/utils/createSearchParams.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ title: createSearchParams

## Summary

[Reference Documentation ↗](https://api.reactrouter.com/v7/functions/react_router.createSearchParams.html)
[Reference Documentation ↗](https://api.reactrouter.com/v7/functions/react-router.createSearchParams.html)

Creates a URLSearchParams object using the given initializer.

Expand Down
5 changes: 1 addition & 4 deletions docs/api/utils/createSession.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,9 @@ hidden: true

## Summary

[Reference Documentation ↗](https://api.reactrouter.com/v7/functions/react_router.createSession.html)
[Reference Documentation ↗](https://api.reactrouter.com/v7/functions/react-router.createSession.html)

Creates a new Session object.

Note: This function is typically not invoked directly by application code.
Instead, use a `SessionStorage` object's `getSession` method.



5 changes: 1 addition & 4 deletions docs/api/utils/createSessionStorage.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,9 @@ hidden: true

## Summary

[Reference Documentation ↗](https://api.reactrouter.com/v7/functions/react_router.createSessionStorage.html)
[Reference Documentation ↗](https://api.reactrouter.com/v7/functions/react-router.createSessionStorage.html)

Creates a SessionStorage object using a SessionIdStorageStrategy.

Note: This is a low-level API that should only be used if none of the
existing session storage options meet your requirements.



2 changes: 1 addition & 1 deletion docs/api/utils/href.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ title: href

## Summary

[Reference Documentation ↗](https://api.reactrouter.com/v7/functions/react_router.href.html)
[Reference Documentation ↗](https://api.reactrouter.com/v7/functions/react-router.href.html)

Returns a resolved URL path for the specified route.

Expand Down
2 changes: 1 addition & 1 deletion docs/api/utils/isCookie.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,6 @@ title: isCookie

## Summary

[Reference Documentation ↗](https://api.reactrouter.com/v7/functions/react_router.isCookie.html)
[Reference Documentation ↗](https://api.reactrouter.com/v7/functions/react-router.isCookie.html)

Returns true if an object is a Remix cookie container.
2 changes: 1 addition & 1 deletion docs/api/utils/isSession.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,6 @@ title: isSession

## Summary

[Reference Documentation ↗](https://api.reactrouter.com/v7/functions/react_router.isSession.html)
[Reference Documentation ↗](https://api.reactrouter.com/v7/functions/react-router.isSession.html)

Returns true if an object is a React Router session.
2 changes: 1 addition & 1 deletion docs/api/utils/parsePath.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ title: parsePath

## Summary

[Reference Documentation ↗](https://api.reactrouter.com/v7/functions/react_router.parsePath.html)
[Reference Documentation ↗](https://api.reactrouter.com/v7/functions/react-router.parsePath.html)

Parses a string URL path into its separate pathname, search, and hash components.

Expand Down
24 changes: 12 additions & 12 deletions docs/explanation/sessions-and-cookies.md
Original file line number Diff line number Diff line change
Expand Up @@ -449,17 +449,17 @@ To learn more about each attribute, please see the [MDN Set-Cookie docs][cookie-
[csrf]: https://developer.mozilla.org/en-US/docs/Glossary/CSRF
[cookies]: #cookies
[sessions]: #sessions
[session-storage]: https://api.reactrouter.com/v7/interfaces/react_router.SessionStorage
[session-api]: https://api.reactrouter.com/v7/interfaces/react_router.Session
[is-session]: https://api.reactrouter.com/v7/functions/react_router.isSession
[cookie-api]: https://api.reactrouter.com/v7/interfaces/react_router.Cookie
[create-session-storage]: https://api.reactrouter.com/v7/functions/react_router.createSessionStorage
[create-session]: https://api.reactrouter.com/v7/functions/react_router.createSession
[create-memory-session-storage]: https://api.reactrouter.com/v7/functions/react_router.createMemorySessionStorage
[create-file-session-storage]: https://api.reactrouter.com/v7/functions/_react_router_node.createFileSessionStorage
[create-workers-kv-session-storage]: https://api.reactrouter.com/v7/functions/_react_router_cloudflare.createWorkersKVSessionStorage
[create-arc-table-session-storage]: https://api.reactrouter.com/v7/functions/_react_router_architect.createArcTableSessionStorage
[session-storage]: https://api.reactrouter.com/v7/interfaces/react-router.SessionStorage
[session-api]: https://api.reactrouter.com/v7/interfaces/react-router.Session
[is-session]: https://api.reactrouter.com/v7/functions/react-router.isSession
[cookie-api]: https://api.reactrouter.com/v7/interfaces/react-router.Cookie
[create-session-storage]: https://api.reactrouter.com/v7/functions/react-router.createSessionStorage
[create-session]: https://api.reactrouter.com/v7/functions/react-router.createSession
[create-memory-session-storage]: https://api.reactrouter.com/v7/functions/react-router.createMemorySessionStorage
[create-file-session-storage]: https://api.reactrouter.com/v7/functions/_react-router_node.createFileSessionStorage
[create-workers-kv-session-storage]: https://api.reactrouter.com/v7/functions/_react-router_cloudflare.createWorkersKVSessionStorage
[create-arc-table-session-storage]: https://api.reactrouter.com/v7/functions/_react-router_architect.createArcTableSessionStorage
[cookie]: https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies
[cookie-attrs]: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#attributes
[is-cookie]: https://api.reactrouter.com/v7/functions/react_router.isCookie
[create-cookie]: https://api.reactrouter.com/v7/functions/react_router.createCookie
[is-cookie]: https://api.reactrouter.com/v7/functions/react-router.isCookie
[create-cookie]: https://api.reactrouter.com/v7/functions/react-router.createCookie
4 changes: 2 additions & 2 deletions docs/explanation/state-management.md
Original file line number Diff line number Diff line change
Expand Up @@ -507,8 +507,8 @@ As bonus party trick, the form is functional even before JavaScript loads (see [

If you ever find yourself entangled in managing and synchronizing state for network operations, React Router likely offers a more elegant solution.

[use_navigation]: https://api.reactrouter.com/v7/functions/react_router.useNavigation
[use_fetcher]: https://api.reactrouter.com/v7/functions/react_router.useFetcher
[use_navigation]: https://api.reactrouter.com/v7/functions/react-router.useNavigation
[use_fetcher]: https://api.reactrouter.com/v7/functions/react-router.useFetcher
[loader_data]: ../start/framework/data-loading
[action_data]: ../start/framework/actions
[cookies]: ./sessions-and-cookies#cookies
Expand Down
4 changes: 2 additions & 2 deletions docs/how-to/presets.md
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,6 @@ export default {
} satisfies Config;
```

[react-router-config]: https://api.reactrouter.com/v7/types/_react_router_dev.config.Config.html
[preset-type]: https://api.reactrouter.com/v7/types/_react_router_dev.config.Preset.html
[react-router-config]: https://api.reactrouter.com/v7/types/_react-router_dev.config.Config.html
[preset-type]: https://api.reactrouter.com/v7/types/_react-router_dev.config.Preset.html
[server-bundles]: ./server-bundles
4 changes: 2 additions & 2 deletions docs/how-to/server-bundles.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,5 +62,5 @@ When using server bundles, the build manifest contains the following properties:
- `routeIdToServerBundleId` — An object that maps route IDs to their server bundle ID
- `routes` — A route manifest that maps route IDs to route metadata. This can be used to drive a custom routing layer in front of your React Router request handlers

[react-router-config]: https://api.reactrouter.com/v7/types/_react_router_dev.config.Config.html
[server-bundles-function]: https://api.reactrouter.com/v7/types/_react_router_dev.config.ServerBundlesFunction.html
[react-router-config]: https://api.reactrouter.com/v7/types/_react-router_dev.config.Config.html
[server-bundles-function]: https://api.reactrouter.com/v7/types/_react-router_dev.config.ServerBundlesFunction.html
2 changes: 1 addition & 1 deletion docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ These icons indicate which mode the content is relevant to.

Additional auto-generated reference documentation is available:

[Autogenerated Reference Docs ↗](https://api.reactrouter.com/v7/modules/react_router.html)
[Autogenerated Reference Docs ↗](https://api.reactrouter.com/v7/)

## Upgrading

Expand Down
4 changes: 2 additions & 2 deletions docs/start/data/route-object.md
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,7 @@ createBrowserRouter([
]);
```

[`ShouldRevalidateFunctionArgs` Reference Documentation ↗](https://api.reactrouter.com/v7/interfaces/react_router.ShouldRevalidateFunctionArgs.html)
[`ShouldRevalidateFunctionArgs` Reference Documentation ↗](https://api.reactrouter.com/v7/interfaces/react-router.ShouldRevalidateFunctionArgs.html)

Please note the default behavior is different in [Framework Mode](../modes).

Expand Down Expand Up @@ -244,5 +244,5 @@ createBrowserRouter([

Next: [Data Loading](./data-loading)

[loader-params]: https://api.reactrouter.com/v7/interfaces/react_router.LoaderFunctionArgs
[loader-params]: https://api.reactrouter.com/v7/interfaces/react-router.LoaderFunctionArgs
[middleware]: ../../how-to/middleware
2 changes: 1 addition & 1 deletion docs/start/data/routing.md
Original file line number Diff line number Diff line change
Expand Up @@ -278,4 +278,4 @@ const { "*": splat } = params;

Next: [Route Object](./route-object)

[outlet]: https://api.reactrouter.com/v7/functions/react_router.Outlet.html
[outlet]: https://api.reactrouter.com/v7/functions/react-router.Outlet.html
2 changes: 1 addition & 1 deletion docs/start/framework/pending-ui.md
Original file line number Diff line number Diff line change
Expand Up @@ -139,4 +139,4 @@ function Task({ task }) {

Next: [Testing](./testing)

[use_fetcher]: https://api.reactrouter.com/v7/functions/react_router.useFetcher.html
[use_fetcher]: https://api.reactrouter.com/v7/functions/react-router.useFetcher.html
16 changes: 8 additions & 8 deletions docs/start/framework/route-module.md
Original file line number Diff line number Diff line change
Expand Up @@ -496,27 +496,27 @@ export function shouldRevalidate(

When using [SPA Mode][spa-mode], there are no server loaders to call on navigations, so `shouldRevalidate` behaves the same as it does in [Data Mode][data-mode-should-revalidate].

[`ShouldRevalidateFunctionArgs` Reference Documentation ↗](https://api.reactrouter.com/v7/interfaces/react_router.ShouldRevalidateFunctionArgs.html)
[`ShouldRevalidateFunctionArgs` Reference Documentation ↗](https://api.reactrouter.com/v7/interfaces/react-router.ShouldRevalidateFunctionArgs.html)

---

Next: [Rendering Strategies](./rendering)

[middleware-params]: https://api.reactrouter.com/v7/types/react_router.MiddlewareFunction.html
[middleware-params]: https://api.reactrouter.com/v7/types/react-router.MiddlewareFunction.html
[middleware]: ../../how-to/middleware
[when-middleware-runs]: ../../how-to/middleware#when-middleware-runs
[loader-params]: https://api.reactrouter.com/v7/interfaces/react_router.LoaderFunctionArgs
[client-loader-params]: https://api.reactrouter.com/v7/types/react_router.ClientLoaderFunctionArgs
[action-params]: https://api.reactrouter.com/v7/interfaces/react_router.ActionFunctionArgs
[client-action-params]: https://api.reactrouter.com/v7/types/react_router.ClientActionFunctionArgs
[loader-params]: https://api.reactrouter.com/v7/interfaces/react-router.LoaderFunctionArgs
[client-loader-params]: https://api.reactrouter.com/v7/types/react-router.ClientLoaderFunctionArgs
[action-params]: https://api.reactrouter.com/v7/interfaces/react-router.ActionFunctionArgs
[client-action-params]: https://api.reactrouter.com/v7/types/react-router.ClientActionFunctionArgs
[use-route-error]: ../../api/hooks/useRouteError
[is-route-error-response]: ../../api/utils/isRouteErrorResponse
[headers]: https://developer.mozilla.org/en-US/docs/Web/API/Response/headers
[use-matches]: ../../api/hooks/useMatches
[link-element]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/link
[meta-element]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta
[meta-params]: https://api.reactrouter.com/v7/interfaces/react_router.MetaArgs
[meta-function]: https://api.reactrouter.com/v7/types/react_router.MetaDescriptor.html
[meta-params]: https://api.reactrouter.com/v7/interfaces/react-router.MetaArgs
[meta-function]: https://api.reactrouter.com/v7/types/react-router.MetaDescriptor.html
[data-mode-should-revalidate]: ../data/route-object#shouldrevalidate
[spa-mode]: ../../how-to/spa
[client-data]: ../../how-to/client-data
2 changes: 1 addition & 1 deletion docs/start/framework/routing.md
Original file line number Diff line number Diff line change
Expand Up @@ -359,4 +359,4 @@ Note that these routes do not participate in data loading, actions, code splitti
Next: [Route Module](./route-module)

[file-route-conventions]: ../../how-to/file-route-conventions
[outlet]: https://api.reactrouter.com/v7/functions/react_router.Outlet.html
[outlet]: https://api.reactrouter.com/v7/functions/react-router.Outlet.html
18 changes: 9 additions & 9 deletions docs/tutorials/address-book.md
Original file line number Diff line number Diff line change
Expand Up @@ -1942,10 +1942,10 @@ That's it! Thanks for giving React Router a shot. We hope this tutorial gives yo
[root-route]: ../explanation/special-files#roottsx
[error-boundaries]: ../how-to/error-boundary
[links]: ../start/framework/route-module#links
[outlet-component]: https://api.reactrouter.com/v7/functions/react_router.Outlet
[outlet-component]: https://api.reactrouter.com/v7/functions/react-router.Outlet
[file-route-conventions]: ../how-to/file-route-conventions
[contacts-1]: http://localhost:5173/contacts/1
[link-component]: https://api.reactrouter.com/v7/functions/react_router.Link
[link-component]: https://api.reactrouter.com/v7/functions/react-router.Link
[client-loader]: ../start/framework/route-module#clientloader
[spa]: ../how-to/spa
[type-safety]: ../explanation/type-safety
Expand All @@ -1959,17 +1959,17 @@ That's it! Thanks for giving React Router a shot. We hope this tutorial gives yo
[url-search-params]: https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams
[loader]: ../start/framework/route-module#loader
[action]: ../start/framework/route-module#action
[form-component]: https://api.reactrouter.com/v7/functions/react_router.Form
[form-component]: https://api.reactrouter.com/v7/functions/react-router.Form
[fetch]: https://developer.mozilla.org/en-US/docs/Web/API/fetch
[form-data]: https://developer.mozilla.org/en-US/docs/Web/API/FormData
[object-from-entries]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/fromEntries
[request-form-data]: https://developer.mozilla.org/en-US/docs/Web/API/Request/formData
[request]: https://developer.mozilla.org/en-US/docs/Web/API/Request
[redirect]: https://api.reactrouter.com/v7/functions/react_router.redirect
[redirect]: https://api.reactrouter.com/v7/functions/react-router.redirect
[response]: https://developer.mozilla.org/en-US/docs/Web/API/Response
[nav-link]: https://api.reactrouter.com/v7/functions/react_router.NavLink
[use-navigation]: https://api.reactrouter.com/v7/functions/react_router.useNavigation
[use-navigate]: https://api.reactrouter.com/v7/functions/react_router.useNavigate
[use-submit]: https://api.reactrouter.com/v7/functions/react_router.useSubmit
[use-fetcher]: https://api.reactrouter.com/v7/functions/react_router.useFetcher
[nav-link]: https://api.reactrouter.com/v7/functions/react-router.NavLink
[use-navigation]: https://api.reactrouter.com/v7/functions/react-router.useNavigation
[use-navigate]: https://api.reactrouter.com/v7/functions/react-router.useNavigate
[use-submit]: https://api.reactrouter.com/v7/functions/react-router.useSubmit
[use-fetcher]: https://api.reactrouter.com/v7/functions/react-router.useFetcher
[react-router-apis]: https://api.reactrouter.com/v7/modules/react_router
Loading