Bỏ qua tới nội dung
Component / 052 / NEXOFRAME

SearchInput

Mẫu chuẩn

Một ô nhập để tìm, gồm icon kính lúp ở đầu và nút xoá ở cuối khi đã có chữ. Nó báo một giá trị (chuỗi) qua một callback. Nó dựng trên Input và Button.

Composite tầng 2Dựng từ Input + Button1 giá trị, 1 callbackEsc xoá khi có chữ

Playground

Gõ để xem nút xoá xuất hiện, bấm nó hoặc gõ Esc để xoá và xem tiêu điểm trở lại ô.

LIVE PREVIEW

Giá trị hiện tại: (rỗng)

import { SearchInput } from "@nexobox/ui";

const [value, setValue] = useState("");

<SearchInput
  value={value}
  onValueChange={setValue}
  placeholder="Tìm nhân sự…"
  aria-label="Tìm nhân sự"
  clearLabel="Xoá tìm kiếm"
/>

Bài toán

Lọc danh sách nhân sự hay hội thoại theo tên. Input cho ô nhập nhưng không có chỗ đặt icon ở trong ô, cũng không có nút xoá. Ghép tay thì icon đè lên chữ, và nút xoá không có tên trợ năng.

Khi nào sử dụng

Nên dùng

Lọc một danh sách trên trang theo từ khoá. Đặt trong toolbar, cạnh FilterTabs.

Khi nào không dùng

Tránh dùng

Không dùng choDùng thay
Chọn một giá trị từ danh sách gợi ýCombobox
Trường của biểu mẫuField với Input
Tìm kiếm toàn site mở dialogDialog tìm kiếm của shell

Dựng từ

Primitive tầng 1Vai trong composite
InputÔ nhập, type="search".
ButtonNút xoá, variant="ghost", size="sm", chỉ hiện khi có chữ.
SearchInput thêm gì
Icon Search01Icon trong ô, đệm trái để chữ không đè icon
Nút xoá có tên trợ năng; bấm xong tiêu điểm trở về ô
Esc xoá khi có chữ

Anatomy

Icon kính lúp neo trái tuyệt đối trong ô, Input có đệm trái chừa chỗ icon, nút xoá neo phải tuyệt đối khi có chữ.

States

Trạng tháiBiểu hiện
RỗngPlaceholder; không có nút xoá
Có chữNút xoá hiện
FocusVòng focus của Input
DisabledTừ Input; nút xoá ẩn

Bàn phím & trợ năng

Gõ, chọn chữ -- Input.
Esc khi có chữ -- composite xoá giá trị, giữ tiêu điểm trong ô.
Tab tới nút xoá, Enter -- Button; composite trả tiêu điểm về ô sau khi xoá.

Seam — host sở hữu gì

Composite không lọc dữ liệu, không debounce, không đồng bộ URL. Host nhận chuỗi và tự quyết lọc lúc nào.

Host sở hữuCấp qua
Lọc dữ liệu, debounceHost, ngoài composite
Giá trị hiện tạivalue / onValueChange

API & triển khai

PropMặc địnhQuy ước
value—Bắt buộc.
onValueChange—Bắt buộc. (value: string) => void.
placeholderundefined—
aria-labelundefinedBắt buộc khi không có Label đi kèm.
clearLabel—Bắt buộc. Tên trợ năng của nút xoá, ví dụ "Xoá tìm kiếm".
disabledfalse—

Design tokens

--nf-semantic-text-muted (icon), --nf-foundation-size-icon-small, --nf-foundation-space-2, --nf-foundation-space-3, --nf-foundation-space-8 (đệm trái chừa chỗ icon). Qua Input và Button: --nf-component-field-*, --nf-component-button-*.

Do / Don't

Nên dùng

clearLabel nói việc: "Xoá tìm kiếm". Host debounce nếu lọc tốn kém. Đặt cạnh FilterTabs trong một toolbar.

Tránh dùng

Nút × không có tên. Gọi server ở mỗi phím gõ. Nhét vào PageHeader.