روٹنگ

ایپ کو مشترکہ لے آؤٹ، شارٹ کٹس والے لنکس اور ہسٹری کے ساتھ روٹس میں تقسیم کریں۔

اس باب کی ایپ آپ کے کونسول میں چل رہی ہے۔ اسے ⌘⌥JCtrl+Shift+J⌘⌥KCtrl+Shift+K⌘⌥C سے کھولیں (پہلے ڈیولپر فیچرز فعال کریں)، پھر اسے آزمائیں۔
باب دیکھیں3:46

اس باب میں

  • فائلیں ہی روٹس ہیں
  • مشترکہ لے آؤٹ
  • واپس جانا
  • ڈائنامک سیگمنٹس

⁦App Router⁩، ⁦Next.js App Router⁩ کے طریقوں کے مطابق app/ کی فائلوں کو URLs سے میپ کرتا ہے۔ براؤزر کا ایڈریس بار اور ہسٹری ہم آہنگ رہتے ہیں، اس لیے واپس جانے، آگے جانے اور ڈیپ لنکس کی سہولت کام کرتی ہے جبکہ UI کونسول میں رینڈر ہوتا ہے۔

فائلیں ہی روٹس ہیں

فہرست کو اس کے اپنے روٹ میں منتقل کریں اور ترتیبات کا صفحہ شامل کریں:

app/+5text
app/  layout.tsx  page.tsx                 → /شامل کردہ:   deployments/شامل کردہ:     page.tsx               → /deploymentsشامل کردہ:     [id]/page.tsx          → /deployments/dpl_8fK2شامل کردہ:   settings/شامل کردہ:     page.tsx               → /settings

مشترکہ لے آؤٹ

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() سے جوڑیں:

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⁩ پر رینڈر ہوتی ہے؟

 

صفحات کے درمیان نیویگیشن میں کیا برقرار رہتا ہے؟