ZipCodeKR
한국 우편번호 검색 컨트롤 — 읽기전용 입력 필드 + 검색 버튼 구성
개요
Cals ZipCodeKR은 한국 우편번호 검색을 위한 전용 컨트롤입니다. 우편번호 입력 필드는 항상 읽기전용이며, 검색 아이콘 버튼을 클릭하여 주소를 조회합니다. 검색 결과는 콜백을 통해 상위 컴포넌트에 전달됩니다.
주요 특징
- ✅ 읽기전용 입력: 우편번호 값은 검색 결과로만 설정
- ✅ 검색 버튼: 아이콘 버튼으로 주소 검색 팝업 트리거
- ✅ FormItem 래핑: label, required, orientation 등 폼 기능 지원
- ✅ 스타일 오버라이드: backgroundColor, color, border 등 커스터마이징
- ✅ 가시성/비활성: visible, disabled prop
- ✅ 크기: xs ~ xl 5단계 크기 지원
기본 사용
Preview
레이블 + 필수 표시
Preview
수평 레이아웃
Preview
비활성 상태
disabled 시 검색 버튼이 비활성화됩니다. 입력 필드는 항상 읽기전용입니다.
Preview
오류 상태
Preview
우편번호를 입력하세요
스타일 오버라이드
Preview
Kakao 주소 검색 연동 예시
import { ZipCodeKR } from "@vortex/ui-cals"
function AddressForm() {
const [zipcode, setZipcode] = useState("")
const [address, setAddress] = useState("")
const handleSearch = () => {
new window.kakao.Postcode({
oncomplete(data) {
setZipcode(data.zonecode)
setAddress(data.roadAddress)
},
}).open()
}
return (
<div className="space-y-2">
<ZipCodeKR
label="우편번호"
value={zipcode}
onSearchClick={handleSearch}
/>
<input value={address} readOnly placeholder="도로명 주소" />
</div>
)
}API Reference
Props
| Prop | Type | Default | Description |
|---|---|---|---|
value | string | - | 우편번호 값 |
defaultValue | string | - | 초기 우편번호 값 |
placeholder | string | - | 안내 텍스트 |
showPlaceholder | boolean | true | placeholder 표시 여부 |
visible | boolean | true | 표시 여부 |
disabled | boolean | false | 검색 버튼 비활성 |
size | "xs"|"sm"|"md"|"lg"|"xl" | "md" | 크기 |
onSearchClick | () => void | - | 검색 버튼 클릭 콜백 |
onComplete | (data: ZipCodeResult) => void | - | 주소 선택 완료 콜백 |
onChange | (value: string) => void | - | 값 변경 콜백 |
searchButtonLabel | string | "주소 검색" | 검색 버튼 aria-label |
searchIcon | ReactNode | - | 커스텀 검색 아이콘 |
label | ReactNode | - | FormItem 레이블 |
showLabel | boolean | false | 빈 레이블 공간 표시 |
labelTooltip | string | - | 레이블 도움말 |
orientation | "horizontal"|"vertical" | - | 레이블 위치 |
required | boolean | false | 필수 입력 표시 |
error | ReactNode | - | 오류 메시지 |
backgroundColor | string | - | 배경색 |
color | string | - | 텍스트/아이콘 색상 |
borderColor | string | - | 테두리 색상 |
borderWidth | string | - | 테두리 두께 |
fontSize | string | - | 폰트 크기 |
fontWeight | string | number | - | 폰트 굵기 |
fontFamily | string | - | 폰트 패밀리 |
fontStyle | string | - | 폰트 스타일 |
textAlign | string | - | 텍스트 정렬 |
className | string | - | 컨테이너 className |
formClassName | string | - | FormItem 래퍼 className |
Ref
| Property/Method | Type | Description |
|---|---|---|
focus() | () => void | 검색 버튼에 포커스 |
blur() | () => void | 포커스 해제 |
element | HTMLElement | null | 컨테이너 DOM 요소 |
ZipCodeResult
| Property | Type | Description |
|---|---|---|
zonecode | string | 우편번호 |
roadAddress | string | 도로명 주소 |
jibunAddress | string | 지번 주소 |
raw | unknown | 전체 원본 데이터 |
접근성
권장 사항
- ✅ group role 컨테이너로 렌더링됩니다.
- ✅ 검색 버튼에
aria-label이 자동 설정됩니다. - ✅ disabled 시 검색 버튼에 disabled 속성이 적용됩니다.
- ✅ error 시 input에
aria-invalid속성이 설정됩니다.
관련 컴포넌트
- Cals LookUp: 범용 조회 컨트롤 (모달 기반)
- Cals Text: 텍스트 입력 컴포넌트
Last updated on