Chuyển tới nội dung

Pro đang mở bán trước. Cài đặt mở từ tháng 1/2027. Xem Pro

Component

EmptyState

Section có tên cho một kết quả thành công nhưng trống. Nó hiện title cùng description tùy chọn, icon trang trí và hành động do bên gọi cung cấp. Ghép nó trong một vùng chứa sẵn có.

  • npm: 0 trực tiếp, 1 tổng
  • registry: 2 trực tiếp, 2 tổng

Xem trước

Chưa có dự án

Tạo một dự án để giữ công việc của bạn cùng một chỗ.

Props

  • title
  • description
  • icon
  • action
import { IconLayoutGrid } from "@tabler/icons-react"
import { Button } from "@/components/ui/button"
import { EmptyState } from "@/components/ui/empty-state"

const createProject = () => { /* Tạo project trong ứng dụng của bạn. */ }

<EmptyState title="Chưa có dự án" description="Tạo một dự án để giữ công việc của bạn cùng một chỗ." icon={<IconLayoutGrid size={20} />} action={<Button onClick={createProject}>Tạo dự án</Button>} />

Cách dùng

Khi nào dùng

  • Giải thích vì sao một màn hình thành công chưa có nội dung và đưa hành động đầu tiên của nó.
  • Giải thích rằng bộ lọc không có kết quả khớp và đưa cách để chỉnh chúng.

Khi nào không dùng

  • Nội dung vẫn đang tải. Dùng Skeleton hoặc Spinner.
  • Một thao tác thất bại. Dùng Alert.
  • Một bảng không có hàng. Dùng Table với nội dung trống của nó.

Ví dụ

Lần dùng đầu

Chưa có dự án

Tạo một dự án để giữ ý tưởng và tệp của bạn cùng một chỗ.
import { IconInbox } from "@tabler/icons-react"
import { Button } from "@/components/ui/button"
import { EmptyState } from "@/components/ui/empty-state"

<EmptyState title="Chưa có dự án" description="Tạo một dự án để giữ ý tưởng và tệp của bạn cùng một chỗ." icon={<IconInbox size={20} />} action={<Button>Tạo dự án</Button>} />

Kết quả đã lọc

Không có dự án phù hợp

Thử tìm kiếm khác hoặc xóa bộ lọc để xem tất cả dự án.
import { IconSearch } from "@tabler/icons-react"
import { EmptyState } from "@/components/ui/empty-state"
import { Link } from "@/components/ui/link"

<EmptyState title="Không có dự án phù hợp" description="Thử tìm kiếm khác hoặc xóa bộ lọc để xem tất cả dự án." icon={<IconSearch size={20} />} action={<Link href="#all-projects">Xem tất cả dự án</Link>} />

Nên và không nên

Nên

  • Giải thích vì sao không có nội dung và đưa một bước tiếp theo hữu ích.
  • Dùng thông báo lần dùng đầu khi chưa có nội dung nào, và thông báo khác khi bộ lọc che nội dung.
  • Ghép bên trong một section của trang đã có, hoặc trong Card.

Không nên

  • Đừng dùng trạng thái trống cho lúc đang tải hoặc khi có lỗi.
  • Đừng thêm viền card thứ hai quanh component.
  • Đừng thông báo các section trống tĩnh như live region.

Props

TênKiểuGiá trịMặc địnhMô tả
title bắt buộcnode--Tiêu đề ngắn, đặt tên cho kết quả trống.
descriptionnode--Lời giải thích hoặc bước tiếp theo cho kết quả trống.
iconnode--Icon trang trí do bên gọi cung cấp.
actionnode--Hành động do bên gọi cung cấp, giúp người dùng đi tiếp.

Cấu tạo

PhầnMô tả
rootSection có tên, căn giữa, dùng khoảng cách của token, không có viền card.
titleTiêu đề đặt tên cho section theo mặc định.
descriptionChữ phụ tùy chọn, giải thích vì sao kết quả trống.
iconIcon trang trí tùy chọn, bằng màu icon phụ.
actionsHành động do bên gọi cung cấp, chẳng hạn Button hoặc Link.

Khả năng truy cập

Role: region

  • title đặt tên cho section, trừ khi aria-label hoặc aria-labelledby đưa một tên khác.
  • Không thêm live region theo mặc định. Bên gọi có thể đặt role="status" khi kết quả đổi.
  • Icon là trang trí. Title và description giải thích kết quả trống.

Cài đặt

npx werewolf-ui add empty-state

Chạy npx werewolf-ui init một lần trong app trước khi thêm component. Init cài token, thêm CSS import và luật cho agent. Add cài component này cùng các dependency và giữ nguyên theme của bạn. Xem Cài đặt để biết yêu cầu và cách cài qua registry.