shadcn/ui
Gyakorlati példák
Login form, Dialog/Modal, Dropdown menu és Toast értesítések minták shadcn/ui-val.
Gyakorlati példák
Login form
"use client"
import { useState } from "react"
import { Button } from "@/components/ui/button"
import { Input } from "@/components/ui/input"
import { Label } from "@/components/ui/label"
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"
export default function LoginPage() {
const [isLoading, setIsLoading] = useState(false)
async function handleSubmit(e: React.FormEvent) {
e.preventDefault()
setIsLoading(true)
setIsLoading(false)
}
return (
<div className="min-h-screen flex items-center justify-center">
<Card className="w-[400px]">
<CardHeader>
<CardTitle className="text-2xl">Bejelentkezés</CardTitle>
<CardDescription>Add meg az adataidat a folytatáshoz</CardDescription>
</CardHeader>
<CardContent>
<form onSubmit={handleSubmit} className="space-y-4">
<div className="space-y-2">
<Label htmlFor="email">Email</Label>
<Input id="email" type="email" required />
</div>
<div className="space-y-2">
<Label htmlFor="password">Jelszó</Label>
<Input id="password" type="password" required />
</div>
<Button type="submit" className="w-full" disabled={isLoading}>
{isLoading ? "Betöltés..." : "Bejelentkezés"}
</Button>
</form>
</CardContent>
</Card>
</div>
)
}Dialog / Modal
"use client"
import { Button } from "@/components/ui/button"
import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger } from "@/components/ui/dialog"
export default function ExampleDialog() {
return (
<Dialog>
<DialogTrigger asChild>
<Button variant="outline">Megnyitás</Button>
</DialogTrigger>
<DialogContent>
<DialogHeader>
<DialogTitle>Cím</DialogTitle>
<DialogDescription>Leírás.</DialogDescription>
</DialogHeader>
<DialogFooter>
<Button>Mentés</Button>
</DialogFooter>
</DialogContent>
</Dialog>
)
}Rövid összefoglaló
- Dialog/Dropdown/Toast komponensek Radix alapú interakciók.
- Next.js-ben az interaktív példák jellemzően
"use client"-et igényelnek.