Project Icon

shadcn-table

基于Next.js的自定义表格组件 支持服务端数据处理

shadcn-table是基于Next.js和shadcn/ui的表格组件,提供服务端数据处理功能。它支持自定义列、动态搜索和分面过滤,并集成了高级筛选和浮动操作栏。该项目采用TanStack/react-table和Drizzle ORM等技术,为开发者提供灵活的表格解决方案。

Shadcn 表格

这是一个具有服务器端排序、筛选和分页功能的 shadcn 表格。它是使用 create-t3-app 引导创建的。

Shadcn 表格

警告 此项目仍在开发中,尚未准备好用于生产环境。

它使用了新技术(ppr、react 编译器),这些技术可能会发生变化并可能导致您的应用程序出现问题。

技术栈

特性

  • 服务器端分页、排序和筛选(通过 useDataTable 钩子)
  • 可自定义列(dataTablecolumns 属性)
  • 动态防抖搜索筛选器和多面筛选器(filterFields 属性)
  • 动态 Data-Table-Toolbar,包含搜索、筛选和操作
  • 可选的类似 Notion 的高级筛选(enableAdvancedFilter 属性)
  • 可选的类似 Linear 的行选择浮动栏(floatingBar 属性)

本地运行

  1. 克隆仓库

    git clone https://github.com/sadmann7/shadcn-table
    
  2. 使用 pnpm 安装依赖

    pnpm install
    
  3. 复制 .env.example.env 并更新变量。

    cp .env.example .env
    
  4. 启动开发服务器

    pnpm run dev
    
  5. 推送数据库架构

    pnpm run db:push
    

构建您自己的表格

  1. 将以下文件夹和文件复制到您的项目中(已配置)的指定位置

    • src/components/data-table
    • src/db/index.ts
    • src/hooks
    • src/lib
    • src/types

    同时使用以下命令安装所需的 shadcn 组件和其他必需包:

    pnpm dlx shadcn-ui@latest init
    
    pnpm dlx shadcn-ui@latest add badge button calendar checkbox command dialog dropdown-menu form input label popover select separator skeleton sonner table toggle-group tooltip
    
    pnpm add drizzle-orm postgres @tanstack/react-table zod @t3-oss/env-nextjs
    pnpm add -D drizzle-kit dotenv-cli pg tsx
    
  2. 配置环境变量 然后设置数据库 URL,在本例中,我们使用 PlanetScale MySQL2 数据库。我们的架构也将使用此数据库。

  3. 数据库操作:您可以使用任何您选择的 ORM,但在这个特定示例中,我们使用 Drizzle ORMNeon

    tasks 表为例。

    • @/db/schema.ts 创建表格架构
    • @/lib/validations/tasks.ts 文件中创建相关的 zod 验证
  4. 设置表格

    • 创建文件:在您的 app 目录中创建 page.tsx 和(如果需要)layout.tsx
    • 复制目录:将 ./_components./_lib 目录复制到您的项目中。
    • 更新查询/变更:修改 ./_lib/queries.ts./_lib/actions.ts 以匹配您的数据库操作。
    • 更新浮动栏:更新 ./_components/tasks-table-floating-bar.tsx 以匹配您表格的操作(可选)。
    • 定义表格列:更新 ./_components/tasks-table-columns.tsx 以定义列标题、操作、可搜索和可筛选的列。
    • 设置数据获取:在 ./page.tsx 中,定义 getTasksPromisegetTaskCountByStatusgetTaskCountByPriority
    • 获取数据:在 ./_components/tasks-table.tsx 中,使用 React.use 钩子消费 getTasksPromise 承诺。该承诺被传递以触发 suspense 边界。
    • 记忆化表格列:在 ./_components/tasks-table.tsx 中,使用 React.useMemo 钩子记忆化在 ./_components/tasks-table-columns.tsx 中定义的列,以防止不必要的重新渲染。
    • 使用数据表格钩子:在 ./_components/tasks-table.tsx 中,调用 ./hooks/useTasksTable.tsx 钩子来处理服务器端分页、排序和筛选。
    • 移除任务表格提供者:确保从 ./components/tasks-table-provider.tsx 中移除提供者。该提供者用于展示一些额外功能,如浮动栏和高级筛选。

代码库概述

YouTube 上观看代码库概述视频。

考虑订阅 Kavin Desi Valli 的 YouTube 频道 以获取更多视频。

如何部署?

请遵循 VercelNetlifyDocker 的部署指南以获取更多信息。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

白日梦AI

白日梦AI提供专注于AI视频生成的多样化功能,包括文生视频、动态画面和形象生成等,帮助用户快速上手,创造专业级内容。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

讯飞绘镜

讯飞绘镜是一个支持从创意到完整视频创作的智能平台,用户可以快速生成视频素材并创作独特的音乐视频和故事。平台提供多样化的主题和精选作品,帮助用户探索创意灵感。

Project Cover

讯飞文书

讯飞文书依托讯飞星火大模型,为文书写作者提供从素材筹备到稿件撰写及审稿的全程支持。通过录音智记和以稿写稿等功能,满足事务性工作的高频需求,帮助撰稿人节省精力,提高效率,优化工作与生活。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号