ComponentsP3 본문

FormField

라벨·컨트롤·설명/오류 묶음 — htmlFor와 aria-describedby 배선을 자동화하고 단일 자식에 id를 주입합니다.

마지막 업데이트 2026-06-11

한눈에#

라벨·컨트롤·설명/오류를 묶고 htmlFor/aria-describedby/aria-invalid 배선을 자동화합니다 — id를 자동 생성해 라벨과 단일 자식 컨트롤에 양쪽으로 주입합니다.

회사 메일 주소를 입력하세요.

  • 라벨·설명·오류 묶음
  • htmlFor·aria 자동 배선
  • id 자동 주입
  • Tier 1 필드 오류

error가 있으면 description이 숨고 role=alert로 노출 + 자식에 aria-invalid 자동 주입

사용 시점#

라벨·설명·오류 배선이 붙는 단일 컨트롤을 감싸면 FormField — 배선이 불필요하거나 폼 전체 메시지면 다른 컴포넌트입니다.

쓴다

Input·Textarea·Select 등에 라벨·설명·필수·오류 배선을 자동화할 때

대신 Input

라벨·오류 배선이 필요 없는 단일 입력이면 컨트롤을 그대로

대신 FormMessage

한 필드가 아니라 폼 전체에 걸린 메시지(제출 실패·계정 잠금, Tier 2)

플레이그라운드#

컨트롤로 props를 조작하면 미리보기와 코드가 실시간 갱신됩니다.

import { FormField, Input } from '@wds/ui-web';

<FormField
  label="이메일"
>
  <Input aria-label="이메일" placeholder="name@wiz.com" />
</FormField>

변형#

required — 필수 표시

200자 이내로 작성하세요.

Textarea 등 다른 컨트롤도 동일 패턴

크기#

고정 크기가 없는 유동 레이아웃입니다 — 컨트롤 폭을 따라가며, 라벨은 body-2 미디엄, 설명/오류는 caption 크기입니다.

상태#

error — description 대신 오류 노출

error가 있으면 description은 숨고 오류가 role="alert"로 노출됩니다. 컨트롤의 aria-describedby도 오류 쪽으로 전환되고, 단일 자식 컨트롤에는 aria-invalid="true"가 자동 주입됩니다. 보더 색은 컨트롤 자신의 invalid prop 책임입니다 — 함께 넘기세요.

Props#

Prop타입기본값설명
labelstring필드 라벨 — htmlFor로 컨트롤과 연결
htmlForstring컨트롤 id — 미지정 시 자동 생성해 단일 자식에 주입
requiredbooleanfalse필수 표시(*, 장식) + 단일 자식에 aria-required="true" 주입
descriptionReactNode보조 설명 — aria-describedby로 컨트롤에 연결
errorstring오류 메시지 — role=alert로 노출·연결 + 단일 자식에 aria-invalid="true" 주입
childrenReactNode컨트롤 — 단일 요소면 id/aria-describedby 자동 주입
classNamestring루트 div에 병합

접근성#

  • 자식에 id 전달 패턴 — 단일 요소 자식에 id(미보유 시)와 aria-describedby를 자동 주입해 라벨·설명·오류가 모두 배선됩니다
  • 자식이 여럿이면 주입하지 않습니다 — htmlFor + 자식 id로 직접 배선하세요
  • 자식의 기존 aria-describedby는 덮지 않고 병합합니다
  • 오류는 role="alert"로 등장 즉시 스크린리더에 공지됩니다
  • 검증 ARIA 자동 주입 — 단일 자식 컨트롤에 erroraria-invalid="true", requiredaria-required="true"를 주입합니다(자식이 직접 준 값은 보존)
  • 필수 표시 *는 장식입니다 — 실제 검증 의미는 위 aria-required 주입이 담당합니다

토큰#

component 토큰 없이 semantic을 직접 소비합니다(신설 기준 §4 미충족).

속성토큰
라벨color.text · font.size.body-2 · font.weight.medium
필수 표시color.error
설명color.text-subtle · font.size.caption
오류color.error-text · font.size.caption
간격space.2