برنامه نویسی

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

در این مقاله با نمونه هایی از مسیر برنامه در shadcn-ui/ui آشنا می شویم. این مقاله شامل بخش های زیر است:

  1. پوشه نمونه ها کجا قرار دارد؟
  2. در examples/layout.tsx چیست؟
  3. تفاوت بین examples/layout.tsx و (app)/layout.tsx
  4. مسیرهای فرعی در پوشه نمونه

پوشه نمونه ها کجا قرار دارد؟

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 وجود دارد

  1. PageHeader ثابت می ماند
  2. محتوای بخش قهرمان تغییر کرد
  3. به جای {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 را بارگیری می‌کند. جالب هست.

مسیرهای فرعی در پوشه نمونه

مسیرهای فرعی در مثال های زیر وجود دارد:

1718051794425%3Fe%3D1723680000%26v%3Dbeta%26t%3D vhFG9OOX

اینها پوشه هایی هستند که در نمونه های ناوبری که در تصویر زیر نشان داده شده است استفاده شده است:

آیا می خواهید یاد بگیرید که چگونه 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

منابع:

  1. https://github.com/shadcn-ui/ui/blob/main/apps/www/app/(app)/examples/layout.tsx

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا