تجزیه و تحلیل پایگاه کد shadcn-ui/ui: نمونههایی از مسیر توضیح داده شده است.

در این مقاله با نمونه هایی از مسیر برنامه در shadcn-ui/ui آشنا می شویم. این مقاله شامل بخش های زیر است:
- پوشه نمونه ها کجا قرار دارد؟
- در examples/layout.tsx چیست؟
- تفاوت بین examples/layout.tsx و (app)/layout.tsx
- مسیرهای فرعی در پوشه نمونه
پوشه نمونه ها کجا قرار دارد؟
Shadcn-ui/ui از روتر برنامه استفاده می کند و پوشه نمونه ها در (app)، یک گروه مسیر در Next.js قرار دارد.
در examples/layout.tsx چیست؟
در هر layout.tsx در Next.js، عناصر چیدمان رایج مانند سرصفحه، پاورقی، ستونهای کناری را قرار میدهیم و این نیز بچهها را بارگذاری میکند که page.tsx را رندر میکنند.
قطعه کد زیر از shadcn-ui/ui انتخاب شده است:
import { Metadata } from "next"
import Link from "next/link"
import { cn } from "@/lib/utils"
import { Announcement } from "@/components/announcement"
import { ExamplesNav } from "@/components/examples-nav"
import {
PageActions,
PageHeader,
PageHeaderDescription,
PageHeaderHeading,
} from "@/components/page-header"
import { buttonVariants } from "@/registry/new-york/ui/button"
export const metadata: Metadata = {
title: "Examples",
description: "Check out some examples app built using the components.",
}
interface ExamplesLayoutProps {
children: React.ReactNode
}
export default function ExamplesLayout({ children }: ExamplesLayoutProps) {
return (
<div className="container relative">
<PageHeader>
<Announcement />
<PageHeaderHeading className="hidden md:block">
Check out some examples
</PageHeaderHeading>
<PageHeaderHeading className="md:hidden">Examples</PageHeaderHeading>
<PageHeaderDescription>
Dashboard, cards, authentication. Some examples built using the
components. Use this as a guide to build your own.
</PageHeaderDescription>
<PageActions>
<Link href="/docs" className={cn(buttonVariants(), "rounded-\[6px\]")}>
Get Started
</Link>
<Link
href="/components"
className={cn(
buttonVariants({ variant: "outline" }),
"rounded-\[6px\]"
)}
>
Components
</Link>
</PageActions>
</PageHeader>
<section>
<ExamplesNav />
<div className="overflow-hidden rounded-\[0.5rem\] border bg-background shadow">
{children}
</div>
</section>
</div>
)
}
دارای PageHeader، ExamplesNav، کودکان است
{children} مسیرهای فرعی را با در پوشه نمونه ارائه می کند.
تفاوت بین examples/layout.tsx و (app)/page.tsx
قطعه کد زیر از shadcn-ui/ui انتخاب شده است
import Image from "next/image"
import Link from "next/link"
import { siteConfig } from "@/config/site"
import { cn } from "@/lib/utils"
import { Announcement } from "@/components/announcement"
import { ExamplesNav } from "@/components/examples-nav"
import { Icons } from "@/components/icons"
import {
PageActions,
PageHeader,
PageHeaderDescription,
PageHeaderHeading,
} from "@/components/page-header"
import { buttonVariants } from "@/registry/new-york/ui/button"
import MailPage from "@/app/(app)/examples/mail/page"
export default function IndexPage() {
return (
<div className="container relative">
<PageHeader>
<Announcement />
<PageHeaderHeading>Build your component library</PageHeaderHeading>
<PageHeaderDescription>
Beautifully designed components that you can copy and paste into your
apps. Accessible. Customizable. Open Source.
</PageHeaderDescription>
<PageActions>
<Link href="/docs" className={cn(buttonVariants())}>
Get Started
</Link>
<Link
target="\_blank"
rel="noreferrer"
href={siteConfig.links.github}
className={cn(buttonVariants({ variant: "outline" }))}
>
<Icons.gitHub className="mr-2 h-4 w-4" />
GitHub
</Link>
</PageActions>
</PageHeader>
<ExamplesNav className="\[&>a:first-child\]:text-primary" />
<section className="overflow-hidden rounded-lg border bg-background shadow-md md:hidden md:shadow-xl">
<Image
src="/examples/mail-dark.png"
width={1280}
height={727}
alt="Mail"
className="hidden dark:block"
/>
<Image
src="/examples/mail-light.png"
width={1280}
height={727}
alt="Mail"
className="block dark:hidden"
/>
</section>
<section className="hidden md:block">
<div className="overflow-hidden rounded-lg border bg-background shadow">
<MailPage />
</div>
</section>
</div>
)
}
تفاوت کمی بین (app)/page.tsx و examples/layout.tsx وجود دارد
- PageHeader ثابت می ماند
- محتوای بخش قهرمان تغییر کرد
- به جای {children} در انتهای فایل در (app)/page.tsx، کد زیر را خواهید یافت.
className="overflow-hidden rounded-lg border bg-background shadow-md md:hidden md:shadow-xl">
src="/examples/mail-dark.png"
width={1280}
height={727}
alt="Mail"
className="hidden dark:block"
/>
src="/examples/mail-light.png"
width={1280}
height={727}
alt="Mail"
className="block dark:hidden"
/>
className="hidden md:block">
className="overflow-hidden rounded-lg border bg-background shadow">
/>
به این ترتیب میتوانید نمونه Mail را بدون هیچ تغییری در URL هنگام بازدید از ui.shadcn.com مشاهده کنید، فقط مستقیماً مؤلفه MailPage را بارگیری میکند. جالب هست.
مسیرهای فرعی در پوشه نمونه
مسیرهای فرعی در مثال های زیر وجود دارد:
اینها پوشه هایی هستند که در نمونه های ناوبری که در تصویر زیر نشان داده شده است استفاده شده است:
آیا می خواهید یاد بگیرید که چگونه shadcn-ui/ui را از ابتدا بسازید؟ وارسی ساختن از ابتدا و اگر دوست دارید به آن ستاره بدهید. چالش ها را حل کنید برای ساخت shadcn-ui/ui از ابتدا. اگر گیر کرده اید یا نیاز به کمک دارید؟ راه حل موجود است.
درمورد من:
وب سایت: https://ramunarasinga.com/
لینکدین: https://www.linkedin.com/in/ramu-narasinga-189361128/
Github: https://github.com/Ramu-Narasinga
ایمیل: ramu.narasinga@gmail.com
منابع:
- https://github.com/shadcn-ui/ui/blob/main/apps/www/app/(app)/examples/layout.tsx