05 控制面板⚓︎
效果展示⚓︎
实现代码⚓︎
app/(dashboard)/(routes)/dashboard/page.tsx
"use client";
import { useRouter } from "next/navigation";
import { Card } from "@/components/ui/card";
import {
Code,
ImageIcon,
MessageSquare,
Music,
VideoIcon,
ArrowRight,
} from "lucide-react";
const tools = [
{
label: "进行对话",
icon: MessageSquare,
href: "/conversation",
color: "text-violet-500",
bgColor: "bg-violet-500/10",
},
{
label: "生成图片",
icon: ImageIcon,
color: "text-pink-700",
bgColor: "bg-pink-700/10",
href: "/image",
},
{
label: "生成视频",
icon: VideoIcon,
color: "text-orange-700",
bgColor: "bg-orange-700/10",
href: "/video",
},
{
label: "生成音乐",
icon: Music,
href: "/music",
color: "text-emerald-500",
bgColor: "bg-emerald-500/10",
},
{
label: "生成代码",
icon: Code,
color: "text-green-700",
bgColor: "bg-green-700/10",
href: "/code",
},
];
export default function HomePage() {
const router = useRouter();
return (
<div>
<div className="mb-8 space-y-4">
<h2 className="text-2xl md:text-4xl font-bold text-center">
探索AI的力量
</h2>
<p className="font-light text-sm md:text-lg text-center text-slate-400">
与最聪明的AI聊天-体验AI的力量
</p>
</div>
<div className="px-4 md:px-20 lg:px-32 space-y-4">
{tools.map((tool) => (
<Card
onClick={() => router.push(tool.href)}
key={tool.href}
className="p-4 border-black/5 flex items-center justify-between hover:shadow-md transition cursor-pointer"
>
<div className="flex items-center gap-x-4">
<div className={`p-2 w-fit rounded-md ${tool.bgColor}`}>
<tool.icon className={`w-8 h-8 ${tool.color}`} />
</div>
<div className="font-semibold">{tool.label}</div>
</div>
<ArrowRight className="w-5 h-5" />
</Card>
))}
</div>
</div>
);
}
这段代码是一个在 Next.js 框架下使用的 React 组件,用于创建一个交互式的主页,其中包含一系列的工具卡片(Card)。下面是对代码的主要部分的解释:
- 导入模块和组件:
- 使用
use client
指示这是一个客户端组件。 - 从
next/navigation
导入useRouter
钩子,用于处理路由跳转。 -
导入
Card
组件和一系列图标组件(如Code
,ImageIcon
等)。 -
工具数组
tools
: -
这个数组包含了各种工具的信息,例如标签(label)、图标(icon)、颜色(color)、背景颜色(bgColor)和路由链接(href)。这些信息将用于生成卡片。
-
组件
HomePage
: - 使用
useRouter
钩子获取路由实例。 -
返回一个包含标题、描述和一组卡片的
div
元素。每个卡片代表一个工具,点击时会跳转到对应的路由。 -
渲染工具卡片:
- 使用
map
函数遍历tools
数组,为每个工具生成一个Card
组件。 - 每个卡片上点击事件触发
router.push
方法,实现页面跳转。 - 卡片布局包括一个图标和一个标签,以及一个指向右侧的箭头图标。
这个组件展示了如何在 Next.js 应用中组合使用路由、组件和数组映射来创建动态的、交互式的用户界面。每个卡片上的点击事件触发页面跳转,提供了一个用户友好的导航体验。