Enrutamiento

App Router basado en el sistema de archivos: layouts, páginas, segmentos dinámicos, Link y hooks de navegación.

El App Router asigna las carpetas de app/ a URLs y las mantiene sincronizadas con la barra de direcciones y el historial del navegador.

Páginas

Exporta por defecto un componente desde page.tsx:

app/sessions/page.tsxtsx
import { Text } from "@textjs/app";export default function SessionsPage() {  return <Text bold>Sessions</Text>;}

Layouts

Los layouts envuelven las rutas y conservan su estado durante la navegación.

app/layout.tsxtsx
import type { ReactNode } from "react";import { Box, Text } from "@textjs/app";import Link from "@textjs/app/link";export const metadata = { title: { default: "Acme", template: "%s · Acme" } };export default function RootLayout({ children }: { children?: ReactNode }) {  return (    <Box className="flex-col w-full h-full">      <Box className="flex-row h-1 px-1 gap-2">        <Text bold>▼ Acme</Text>        <Link href="/" shortcut="1">Home</Link>        <Link href="/sessions" shortcut="2">Sessions</Link>      </Box>      <Box className="grow">{children}</Box>    </Box>  );}

Segmentos dinámicos

app/sessions/[id]/page.tsxtsx
import { Text, type PageProps } from "@textjs/app";export default function SessionPage({ params }: PageProps<{ id: string }>) {  return <Text>Session {params.id}</Text>;}

<Link> puede recibir el foco y admite atajos de una sola tecla.

PropDescripción
hrefRuta de destino
shortcutTecla que abre el enlace
replaceSustituir la entrada del historial

useRouter

Navega desde el código:

const router = useRouter();router.push("/sessions/new");router.back();

usePathname y useParams

Lee la ruta actual:

import { useParams, usePathname } from "@textjs/app/navigation";const pathname = usePathname(); // "/sessions/42"const { id } = useParams<{ id: string }>(); // "42"

La navegación hacia atrás y hacia delante y los enlaces profundos funcionan. En un alojamiento estático, los segmentos dinámicos necesitan una página de respaldo que sirva index.html. El adaptador static la genera como 404.html.

Editar esta página en GitHub