ניתוב

פיצול האפליקציה לנתיבים עם layout משותף, קישורים עם קיצורי מקשים והיסטוריה.

האפליקציה של הפרק הזה רצה במסוף. יש לפתוח אותו עם ⌘⌥JCtrl+Shift+J⌘⌥KCtrl+Shift+K⌘⌥C (תחילה להפעיל תכונות למפתחים), ואז לנסות אותה.
צפייה בפרק3:46

בפרק הזה

  • קבצים הם נתיבים
  • ⁦layout⁩ משותף
  • חזרה אחורה
  • מקטעים דינמיים

⁦App Router⁩ ממפה קבצים בתיקייה app/ לכתובות URL, לפי המוסכמות של ⁦Next.js App Router⁩. שורת הכתובת וההיסטוריה של הדפדפן נשארות מסונכרנות, כך שניווט אחורה וקדימה וקישורים עמוקים פועלים בזמן שממשק המשתמש מרונדר במסוף.

קבצים הם נתיבים

יש להעביר את הרשימה לנתיב משלה ולהוסיף דף הגדרות:

app/+5text
app/  layout.tsx  page.tsx                 → /נוסף:   deployments/נוסף:     page.tsx               → /deploymentsנוסף:     [id]/page.tsx          → /deployments/dpl_8fK2נוסף:   settings/נוסף:     page.tsx               → /settings

⁦layout⁩ משותף

layout.tsx עוטף כל דף ושומר על המצב שלו לאורך הניווט. יש למקם בו את הסרגל העליון ואת הניווט.

app/layout.tsx+25tsx
נוסף: import type { ReactNode } from "react";נוסף: import { Box, Spacer, Text } from "@textjs/app";נוסף: import Link from "@textjs/app/link";נוסף: import { usePathname } from "@textjs/app/navigation";נוסף: נוסף: export const metadata = { title: { default: "Acme Deploys", template: "%s · Acme" } };נוסף: נוסף: export default function RootLayout({ children }: { children?: ReactNode }) {נוסף:   const pathname = usePathname();נוסף:   return (נוסף:     <Box className="flex-col grow">נוסף:       <Box className="flex-row h-1 px-1 gap-2">נוסף:         <Text bold>▼ Acme</Text>נוסף:         <Text color="subtle">{`acme.local${pathname === "/" ? "" : pathname}`}</Text>נוסף:         <Spacer />נוסף:       </Box>נוסף:       <Box className="flex-row h-1 px-1 gap-3">נוסף:         <Link href="/" shortcut="1">Overview</Link>נוסף:         <Link href="/deployments" shortcut="2">Deployments</Link>נוסף:         <Link href="/settings" shortcut="3">Settings</Link>נוסף:       </Box>נוסף:       <Box className="flex-col grow p-1">{children}</Box>נוסף:     </Box>נוסף:   );נוסף: }

shortcut מקשר מקש יחיד לקישור. יש ללחוץ על 1, 2 ו-3 במסוף; באפליקציה אמיתית, כתובת ה-URL הייתה משתנה עם כל אחד מהם.

חזרה אחורה

useRouter() מאפשר ניווט מתוך קוד. יש לקשר את Backspace ל-router.back() בתוך ה-layout:

app/layout.tsx+7-2tsx
הוסר: import { Box, Spacer, Text } from "@textjs/app";נוסף: import { Box, Spacer, Text, useInput } from "@textjs/app";import Link from "@textjs/app/link";הוסר: import { usePathname } from "@textjs/app/navigation";נוסף: import { usePathname, useRouter } from "@textjs/app/navigation";export default function RootLayout({ children }: { children?: ReactNode }) {  const pathname = usePathname();נוסף:   const router = useRouter();נוסף: נוסף:   useInput((e) => {נוסף:     if (e.key === "backspace") router.back();נוסף:   });

מקטעים דינמיים

תיקיות [id] מקבלות את הערך שלהן ב-params:

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

באירוח סטטי, מקטעים דינמיים כמו זה דורשים שכתוב ל-index.html. פרק 10 עוסק בכך.

התנסות

זו Acme Deploys בסוף הפרק, רצה ב-DevTools. יש ללחוץ על המשטח, ואז להשתמש במקשים שלמטה.

▼ 05 · ניתוב

פתיחת המסוף

⌘⌥J
CtrlShiftJ
⌘⌥K
CtrlShiftK
⌘⌥C

האפליקציה מרונדרת ב-DevTools.תחילה יש להפעיל את "הצגת תכונות למפתחי אתרים" בהגדרות Safari → מתקדם. אחר כך ללחוץ כאן וללחוץ על 2.

פתיחה במחשב

האפליקציה הזו מרונדרת במסוף של DevTools, שדורש דפדפן במחשב.

בוחן

2 שאלות

להשלמת הפרק, יש לענות על כל השאלות.

איזה קובץ מרונדר ב-⁦/deployments⁩?

 

מה נשמר במעבר בין דפים?