Complete "Loading Data"

This commit is contained in:
2025-03-30 21:25:32 +02:00
parent 3324a15cee
commit af080480e4

View File

@@ -1,8 +1,22 @@
import { Outlet, createRootRoute, Link } from '@tanstack/react-router'; import { Outlet, createRootRoute, Link } from '@tanstack/react-router';
import { TanStackRouterDevtools } from '@tanstack/react-router-devtools'; import { TanStackRouterDevtools } from '@tanstack/react-router-devtools';
import { getContacts } from "@/data";
async function fetchContacts() {
const contacts = await getContacts();
return { contacts };
}
export const Route = createRootRoute({ export const Route = createRootRoute({
component: () => ( loader: fetchContacts,
component: RootLayout,
notFoundComponent: NotFoundComponent,
});
function RootLayout() {
const { contacts } = Route.useLoaderData();
return (
<> <>
<div id="sidebar"> <div id="sidebar">
<h1>React Router Contacts</h1> <h1>React Router Contacts</h1>
@@ -22,14 +36,30 @@ export const Route = createRootRoute({
</form> </form>
</div> </div>
<nav> <nav>
{contacts.length ? (
<ul> <ul>
<li> {contacts.map((contact) => (
<Link to="/contacts/$contractId" params={{ contractId: '1' }}>Your Name</Link> <li key={contact.id}>
</li> <Link to="/contacts/$contractId" params={{ contractId: contact.id }}>
<li> {contact.first || contact.last ? (
<Link to="/contacts/$contractId" params={{ contractId: '2' }}>Your Friend</Link> <>
{contact.first} {contact.last}
</>
) : (
<i>No Name</i>
)}
{contact.favorite ? (
<span></span>
) : null}
</Link>
</li> </li>
))}
</ul> </ul>
) : (
<p>
<i>No contacts</i>
</p>
)}
</nav> </nav>
</div> </div>
<div id={'detail'}> <div id={'detail'}>
@@ -37,9 +67,8 @@ export const Route = createRootRoute({
</div> </div>
<TanStackRouterDevtools/> <TanStackRouterDevtools/>
</> </>
), );
notFoundComponent: NotFoundComponent, }
});
function NotFoundComponent() { function NotFoundComponent() {
return ( return (