Comments (1)
Source code of demo
import { StrictMode, useState } from "react";
import { createRoot } from "react-dom/client";
import {
Link,
Outlet,
useFetcher,
RouterProvider,
createBrowserRouter,
createSearchParams,
generatePath,
} from "react-router-dom";
const AppLayout = () => {
return (
<div>
<div>
<Link to={"/fetcherWithKey"}>FetcherWithKey</Link>
<br />
<Link to={"/fetcherWithoutKey"}>FetcherWithoutKey</Link>
<br />
<Link to={"/other"}>Other</Link>
</div>
<Outlet />
</div>
);
};
const fakeLoader = async ({ request }) => {
const url = new URL(request.url);
const page = Number(url.searchParams.get("page")) || 0;
const data = Array.from({ length: 15 }, (_, i) => i + page * 15).map(
(id) => ({
id,
})
);
await new Promise((res) => setTimeout(res, 500));
return Promise.resolve({
data,
page,
});
};
const FetcherWithKey = () => {
const fetcher = useFetcher({ key: "list1Route" });
const handleFetcher = () => {
const search = createSearchParams({
page: String(fetcher.data ? fetcher.data.page + 1 : 0),
});
const generatedPath = generatePath(`/fetcherWithKey?${search}`);
fetcher.load(generatedPath);
};
return (
<div>
<button onClick={handleFetcher}>Load fetcher</button>
<pre>{JSON.stringify(fetcher, null, " ")}</pre>
</div>
);
};
const FetcherWithoutKey = () => {
const fetcher = useFetcher();
const handleFetcher = () => {
const search = createSearchParams({
page: String(fetcher.data ? fetcher.data.page + 1 : 0),
});
const generatedPath = generatePath(`/fetcherWithoutKey?${search}`);
fetcher.load(generatedPath);
};
return (
<div>
<button onClick={handleFetcher}>Load fetcher</button>
<pre>{JSON.stringify(fetcher, null, " ")}</pre>
</div>
);
};
const Other = () => {
return "OtherRoute";
};
const FetcherWithKeyRoute = {
path: "/fetcherWithKey",
element: <FetcherWithKey />,
loader: fakeLoader,
};
const FetcherWithoutKeyRoute = {
path: "/fetcherWithoutKey",
element: <FetcherWithoutKey />,
loader: fakeLoader,
};
const OtherRoute = {
path: "/other",
element: <Other />,
};
const routes = createBrowserRouter([
{
path: "/",
element: <AppLayout />,
children: [FetcherWithKeyRoute, FetcherWithoutKeyRoute, OtherRoute],
},
]);
const rootElement = document.getElementById("root");
const root = createRoot(rootElement);
root.render(
<StrictMode>
<RouterProvider router={routes} />
</StrictMode>
);
from react-router.
Related Issues (20)
- [Docs]: for useSearchParams, functional updates should be explained in more detail HOT 3
- [Bug]: React router doesn't handle 'content://' URLs
- [Bug]: Outlet component remounts in production when changing state above it HOT 2
- [Bug]: loader of Route running even if Route / Router is not rendered HOT 2
- [Docs]: Docs for shouldRevalidate make it sound like it is only for opting out
- [Bug]: `useLocation` out of sync with `history.location`, leads to potential renders of unmatched `Route`s
- [Bug]: useLoaderData triggers component re rendering even if the route remains unchanged HOT 1
- [Bug]: Cloudflare Pages - Outlet not working. HOT 32
- [Bug]: No route matches URL in production build HOT 3
- [Bug]: <Outlet/> Component is not working in deployment HOT 1
- [Bug]: `window.location` is not updated after a call to `router.navigate()` HOT 1
- [Bug]: router doesn't work in production build, only shows blank. HOT 1
- [Bug]: `<Navigate>` can be canceled by `navigate("?x")` even if guarded by `if(navigation.state === "idle")` HOT 1
- [Bug]: Using embed in a route with param causes it to render the whole application inside the div. HOT 1
- [Docs]: V6 - Mixing up <Route /> with lists [<Route />, <Route />] within one <Routes /> looks working but isn't mentioned in the docs and covered in unit tests. HOT 1
- [Docs]: update state after action behavior HOT 1
- [Bug]: "Cannot find module './index' or its corresponding type declarations" in react-router-dom/server.d.ts HOT 4
- [Bug]: <Outlet/> not working in build production with Vite. HOT 4
- [Bug]: React Router 6 useLoaderData returning cached data after fresh data is returned by the loader function HOT 4
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from react-router.