当前位置: 首页 > news >正文

shadcn/ui

文章目录

  • 前言
    • ✅ 核心特点
    • 📦 支持组件(常用)
    • 🚀 安装使用(框架支持)
      • 初始化(Next.js 项目为例)
      • 添加一个组件
    • 🧠 对比其他组件库
    • 📘 官方资源
    • ✅ 总结
      • ✅ 功能特性:
    • 📦 依赖项(需先安装)
    • 🧱 页面代码:`ChatPage.tsx`
    • 🎨 可选样式增强(全局 CSS)
    • 🧪 进一步可添加功能


前言

shadcn/ui 是一个由社区维护的现代 UI 组件库模板集合,专为 React + Tailwind CSS 生态设计,主打:

  • ✨ 可完全控制样式 &行为(不像 MUI、AntD 那样封闭)
  • 🎯 基于 Radix UI(可访问性强)
  • 🧩 可选的组件拼装,不强绑设计系统
  • ⚙️ 支持 Server Component、SSR、RSC 等现代特性

✅ 核心特点

特性说明
✨ 美观现代默认采用干净、优雅的设计(类似 Vercel / Linear)
🎨 Tailwind 驱动100% Tailwind CSS 控制样式,自由修改
⚛️ Radix UI 底层提供无障碍可访问性支持(A11y)
🧱 可组合所有组件是“导入代码”的方式,无 run-time 限制
🔧 可维护性强你拥有组件代码本体(不再受限组件黑箱)

📦 支持组件(常用)

分类组件
表单Input, Textarea, Select, Switch, Checkbox, Form
弹窗Dialog, Popover, Tooltip, AlertDialog, Sheet
导航Tabs, Accordion, DropdownMenu, NavigationMenu
其他Toast, Badge, Card, Avatar, Skeleton, Progress

🚀 安装使用(框架支持)

支持 Vite、Next.js、Remix 等现代 React 框架。

初始化(Next.js 项目为例)

npx shadcn-ui@latest init

你会被提示:

  • 是否使用 TypeScript
  • UI 目录位置(如 components/ui
  • Tailwind 配置路径
  • 是否安装组件(如 Button, Dialog

添加一个组件

npx shadcn-ui@latest add button

生成的文件:

components/ui/button.tsx

你可以自由修改样式类或行为。


🧠 对比其他组件库

特性shadcn/uiMUIAnt DesignChakra UI
样式控制✅ 完全控制❌ 封闭❌ 封闭⚠️ 类似
设计系统⚠️ 提供默认样式✅ 有✅ 有✅ 有
SSR 支持✅ 优秀⚠️ 需调整⚠️ 有限⚠️ 有限
适合 Tailwind✅ 最佳搭配❌ 不兼容❌ 不兼容❌ 有冲突

📘 官方资源

  • 官网:https://ui.shadcn.com
  • GitHub:https://github.com/shadcn-ui/ui
  • Demo 示例:https://ui.shadcn.com/docs/components/slider

✅ 总结

适合你吗?条件
✅ 喜欢 Tailwind强烈推荐
✅ 需要 SSR / RSC 兼容推荐
✅ 想要样式可控且干净 UI推荐
❌ 想要“开箱即用 + Theme切换 + 组件黑盒”不太适合

下面是一个基于 shadcn/uiReactTailwind CSS 封装的 AI 聊天界面模板,具备如下特性:

✅ 功能特性:

  • 支持聊天消息滚动显示
  • 用户输入框 + 发送按钮
  • 显示用户消息和 AI 消息
  • 使用 shadcn/ui 组件:Input, Button, Card, ScrollArea, Skeleton
  • Tailwind 风格美观整洁

📦 依赖项(需先安装)

npx shadcn-ui@latest init
npx shadcn-ui@latest add button input card scroll-area

🧱 页面代码:ChatPage.tsx

import { useState, useRef, useEffect } from "react"
import { Input } from "@/components/ui/input"
import { Button } from "@/components/ui/button"
import { ScrollArea } from "@/components/ui/scroll-area"
import { Card, CardContent } from "@/components/ui/card"interface Message {role: "user" | "assistant"content: string
}export default function ChatPage() {const [messages, setMessages] = useState<Message[]>([])const [input, setInput] = useState("")const scrollRef = useRef<HTMLDivElement>(null)const handleSend = async () => {if (!input.trim()) returnconst userMsg: Message = { role: "user", content: input }setMessages((prev) => [...prev, userMsg])setInput("")// 模拟 AI 回复setTimeout(() => {const aiMsg: Message = {role: "assistant",content: `你说的是:“${userMsg.content}`}setMessages((prev) => [...prev, aiMsg])}, 1000)}useEffect(() => {scrollRef.current?.scrollIntoView({ behavior: "smooth" })}, [messages])return (<div className="flex flex-col h-screen p-4 max-w-2xl mx-auto"><h2 className="text-2xl font-bold mb-4">AI Chat Assistant</h2><ScrollArea className="flex-1 border rounded-lg p-4 space-y-2 bg-muted">{messages.map((msg, index) => (<Card key={index} className={msg.role === "user" ? "ml-auto bg-white" : "mr-auto bg-gray-100"}><CardContent className="p-3 text-sm whitespace-pre-wrap"><strong>{msg.role === "user" ? "You" : "AI"}:</strong> {msg.content}</CardContent></Card>))}<div ref={scrollRef} /></ScrollArea><div className="mt-4 flex gap-2"><Inputplaceholder="Ask something..."value={input}onChange={(e) => setInput(e.target.value)}onKeyDown={(e) => e.key === "Enter" && handleSend()}/><Button onClick={handleSend}>Send</Button></div></div>)
}

🎨 可选样式增强(全局 CSS)

body {@apply bg-background text-foreground;
}

🧪 进一步可添加功能

功能shadcn 组件建议
Markdown 渲染react-markdown 自定义卡片内容
Skeleton 骨架Skeleton 组件用于 AI 回复加载中
多轮对话滚动ScrollArea + useRef 自动滚动到底部
AI 流式回复useEffect 模拟逐字加载即可

相关文章:

  • Python+requests+pytest接口自动化测试框架的搭建(全)
  • C# MySQL 实现多层级联数据迁移
  • 数据结构:导论
  • RK3399 Android7.1增加应用安装白名单机制
  • python进程hung住如何找到问题所在
  • 内存池学习(一)
  • 腾讯云开发者社区文章内容提取免费API接口教程
  • Hive的存储格式如何优化?
  • 计算机视觉入门:OpenCV与YOLO目标检测
  • CSS3前端入门(第三天)2D转换 transform
  • CAD多边形密堆积2D插件
  • 强化学习笔记总结(结合论文)
  • 设备远程调试新利器:御控网关开启PLC高效运维新时代
  • 书送希望 智启未来 —— 赛力斯超级工厂携手渝北和合家园小学校开展公益赠书活动
  • Python训练day34
  • 边缘计算网关在管网压力远程调控中的通信协议配置
  • 未来技术展望
  • 多模态大语言模型arxiv论文略读(100)
  • 变焦位移计:机器视觉如何克服人工疲劳与主观影响?精准对结构安全实时监测
  • 多杆合一驱动城市空间治理智慧化
  • 平罗门户网站建设/企业网站设计思路
  • 网站设计网站设计网站设计/怎么创建一个网页
  • 茶叶网络营销网站建设/跨境电商培训机构哪个靠谱
  • 建网站素材/商品关键词怎么优化
  • 怎样做自己的网站和发布网站/长沙网站优化对策
  • 网站制作排版/网站制作公司高端