# Search Input
URL: /react/components/search-input
Source: https://github.com/daangn/seed-design/blob/dev/docs/content/react/components/search-input.mdx
검색어를 입력하고 제출하는 입력 필드입니다. Stackflow 화면에서는 Search Bar와 함께 사용합니다.
사용 가능 버전: @seed-design/react@3.1.0, @seed-design/css@3.1.0
## Preview
```tsx
import { SearchInput } from "seed-design/ui/search-input";
export default function SearchInputPreview() {
return (
);
}
```
Stackflow 화면의 상단에서 검색하는 경우에는 Search Input을 직접 배치하지 말고 [Search Bar](/react/stackflow/search-bar)를 사용하세요. Search Bar는 Search Input을 App Bar에 Back·닫기 버튼과 함께 배치하며, 설치하면 Search Input도 함께 설치됩니다.
## Installation
- npm: npx @seed-design/cli@latest add ui:search-input
- pnpm: pnpm dlx @seed-design/cli@latest add ui:search-input
- yarn: yarn dlx @seed-design/cli@latest add ui:search-input
- bun: bun x @seed-design/cli@latest add ui:search-input
## Usage
```tsx
import { SearchInput } from "seed-design/ui/search-input";
```
```tsx
```
## Props
입력의 접근성 레이블은 `aria-label`(기본값 "검색"), Clear 버튼의 레이블은 `clearButtonLabel`(기본값 "지우기")로 바꿀 수 있습니다. `maxLength`, `autoFocus`처럼 입력 요소에 넘길 속성은 `inputProps`로 전달하세요. `ref`는 입력 요소를 가리킵니다.
## Examples
### Submit
Enter를 누르면 `onSubmit`이 현재 값과 함께 호출됩니다. 한글처럼 IME로 조합 중인 글자를 확정하는 Enter는 제출로 처리하지 않습니다.
제출한 뒤에는 입력의 focus를 해제해 모바일 키보드를 내립니다. 제출 뒤에도 계속 입력하게 하려면 `blurOnSubmit={false}`를 사용하세요.
```tsx
import { Text, VStack } from "@seed-design/react";
import { useState } from "react";
import { SearchInput } from "seed-design/ui/search-input";
export default function SearchInputSubmit() {
const [value, setValue] = useState("");
const [submittedValue, setSubmittedValue] = useState(null);
return (
{submittedValue === null ? "아직 검색하지 않았습니다." : `검색한 값: ${submittedValue}`}
);
}
```
### Clear Button
Clear 버튼은 값이 있을 때만 렌더링되고, 누르면 값을 비웁니다. 누르는 동안에는 scale feedback으로 살짝 줄어듭니다. `value`를 넘기지 않은 uncontrolled 상태에서도 동작하며, `onValueChange`가 빈 문자열과 함께 호출됩니다.
입력에 focus가 있었다면 지운 뒤에도 focus를 유지하고, focus가 없었다면 새로 주지 않습니다. 키보드로 Clear 버튼을 누르면 버튼이 사라지므로 focus를 입력으로 옮깁니다.
### Composition
Snippet은 `@seed-design/react`의 `SearchInput.Root`, `SearchInput.Input`, `SearchInput.ClearButton`을 조합합니다. 구성을 바꿔야 하면 설치한 snippet을 고치거나 이 컴포넌트를 직접 조합하세요.
```tsx
import { Icon, SearchInput } from "@seed-design/react";
import { IconXmarkCircleFill } from "@karrotmarket/react-monochrome-icon";
} />
;
```
## Accessibility
- `SearchInput.Root`는 `role="search"`를 가지며, 입력은 `type="search"`와 `enterKeyHint="search"`로 렌더링됩니다.
- 화면에 보이는 레이블이 없으므로 입력과 Clear 버튼에 접근성 레이블이 필요합니다. 직접 조합할 때 `SearchInput.Input`이나 `SearchInput.ClearButton`에 `aria-label` 또는 `aria-labelledby`가 없으면 개발 콘솔에 경고가 출력됩니다.
- 콘텐츠를 누르거나 스크롤할 때 키보드를 내리는 동작은 Search Input이 아닌 화면이 담당합니다. [Search Bar](/react/stackflow/search-bar#keyboard) 예제를 참고하세요.