antd
Ant Design
用于在 Next.js 应用中构建企业级 UI 的 Ant Design 指南。
快速开始
# 核心依赖
pnpm add antd @ant-design/nextjs-registry @ant-design/icons
// app/layout.tsx - 必需配置
import { AntdRegistry } from "@ant-design/nextjs-registry";
import { ConfigProvider, theme } from "antd";
import zhCN from "antd/locale/zh_CN";
export default function RootLayout({ children }) {
return (
<html lang="zh-CN">
<body>
<AntdRegistry>
<ConfigProvider locale={zhCN} theme={{ token: { colorPrimary: "#006aff" } }}>
{children}
</ConfigProvider>
</AntdRegistry>
</body>
</html>
);
}
导入模式
// 组件
import { Button, Table, Form, Modal, message, Space, Tag, Select, Input } from "antd";
// 图标
import { UserOutlined, PlusOutlined, DeleteOutlined, SearchOutlined } from "@ant-design/icons";
// 类型 - 从子模块导入
import type { ColumnsType } from "antd/es/table";
import type { FormInstance } from "antd/es/form";
import type { MenuProps } from "antd";
常用组件速查
| 组件 | 用法 |
|---|---|
| Button | <Button type="primary" icon={<PlusOutlined />}>添加</Button> |
| Tag | <Tag color="success">成功</Tag> |
| Modal | Modal.confirm({ title: "确认删除", onOk }) |
| message | message.success("操作成功") |
| Input.Search | <Input.Search placeholder="搜索..." onSearch={handleSearch} /> |
CRUD 模板
function UserManagement() {
const [data, setData] = useState([]);
const [loading, setLoading] = useState(false);
const [isModalOpen, setIsModalOpen] = useState(false);
const [editingRecord, setEditingRecord] = useState(null);
const [form] = Form.useForm();
const fetchData = async () => {
setLoading(true);
// 获取数据
setLoading(false);
};
const handleAdd = () => {
setEditingRecord(null);
form.resetFields();
setIsModalOpen(true);
};
const handleEdit = (record) => {
setEditingRecord(record);
form.setFieldsValue(record);
setIsModalOpen(true);
};
const handleDelete = (record) => {
Modal.confirm({
title: "确认删除",
content: `确定要删除 "${record.name}" 吗?`,
okButtonProps: { danger: true },
onOk: async () => {
// 删除逻辑
message.success("删除成功");
fetchData();
},
});
};
const handleSubmit = async (values) => {
// 提交逻辑
message.success(editingRecord ? "更新成功" : "创建成功");
setIsModalOpen(false);
fetchData();
};
return (
<div>
<div style={{ marginBottom: 16 }}>
<Button type="primary" icon={<PlusOutlined />} onClick={handleAdd}>
添加
</Button>
</div>
<Table columns={columns} dataSource={data} loading={loading} rowKey="id" />
<Modal
title={editingRecord ? "编辑" : "添加"}
open={isModalOpen}
onOk={() => form.submit()}
onCancel={() => setIsModalOpen(false)}
>
<Form form={form} onFinish={handleSubmit} layout="vertical">
{/* 表单项 */}
</Form>
</Modal>
</div>
);
}
重要注意事项
-
类型导入:
ColumnsType必须从antd/es/table导入,不能从antd导入 -
图标名称:
ShieldOutlined不存在,应使用SafetyOutlined -
SSR 兼容: Next.js App Router 必须使用
AntdRegistry包裹 -
中文本地化: 从
antd/locale/zh_CN导入zhCN -
图标混用: lucide-react 图标可与 antd 图标混用,注意 props 差异:
- antd:
style={{ fontSize: 24 }} - lucide-react:
size={24}
- antd:
-
语义化 DOM: 使用
classNames和stylesprops 进行样式定制 -
Hydration 安全: 避免在组件渲染中使用
Math.random()
查询组件文档
当需要查询特定组件的详细 API 时,搜索本地文档:
- LOCAL_DOCS.md - 本地文档路径和搜索方法
More from azure12355/weilan-skills
browser-agent
AI 驱动的浏览器自动化工具集,包含 agent-browser(无障碍树提取)、actionbook(50+ 网站自动化食谱)、browser-use(Python 自动化库)。使用场景:(1) 抓取需要 JS 渲染的网页内容 (2) 从 X/Twitter、GitHub、Reddit 等平台获取数据 (3) 截图网页 (4) 自动化浏览器操作 (5) 获取网页的无障碍树结构。当用户需要访问动态网页、绕过反爬虫、或执行浏览器自动化时使用此技能。
25drawio-diagrams
专业的 DrawIO 图表生成工具,使用 Material Design 配色和圆角矩形风格。支持 (1) 算法/数据结构图 - DP 状态转移、递归树、排序过程、双指针/滑动窗口 (2) 架构图 - 系统架构、微服务、网络拓扑、组件依赖 (3) 流程图/时序图 - 业务流程、决策流程、审批流程 (4) UML/ER 图 - 类图、实体关系、用例图。当用户提到 "drawio"、"draw.io"、需要绘制流程图、架构图、UML 图、ER 图、DP 状态图、算法可视化时使用此技能。
6github-researcher
GitHub 开源项目深度调研工具。在 GitHub 上搜索、分析特定领域的开源项目,汇总生成结构化调研报告。触发场景:用户要求"调研 GitHub 上的 XXX 工具"、"搜索 XXX 开源项目"、"汇总 GitHub 仓库"、"找 XXX 的开源替代方案"、"对比 GitHub 上的 XXX 项目"、或需要批量分析开源项目并输出报告时使用此 skill。
5diagram-prompter
分析代码库结构并生成各种架构图、流程图、时序图等的 AI 绘图提示词。使用场景:当用户需要为任何代码项目生成可视化图表时,包括系统架构图、模块依赖关系、数据流图、时序图、状态机图、部署架构图等。支持多种图表类型如 Mermaid、PlantUML、C4 模型、UML 类图、ER 图等。适用于技术文档编写、架构设计、代码评审、学习理解新项目等场景。
4yt-dlp-downloader
下载视频和音频的通用工具。支持 YouTube、Bilibili、Twitter/X、抖音、快手等数千个网站。当用户提供视频链接时自动下载到 ~/Downloads 文件夹。
4technical-writer
|
4