Complete "Loading Data"
This commit is contained in:
@@ -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 (
|
||||||
|
|||||||
Reference in New Issue
Block a user