체크박스

체크박스 (Checkbox)

사용자가 여러 옵션 중 여러 값을 선택해야 할 때 폼에서 사용하는 컴포넌트예요. 선택 여부를 표시하는 인디케이터와 라벨을 함께 제공해요.

출처: 문서

본문

사용법 (Usage)

import { Checkbox } from "@chakra-ui/react"
<Checkbox.Root>
  <Checkbox.HiddenInput />
  <Checkbox.Control>
    <Checkbox.Indicator />
  </Checkbox.Control>
  <Checkbox.Label />
</Checkbox.Root>

:::info

닫힌 컴포넌트 조합(closed component composition)을 선호한다면, 아래 스니펫을 확인해 보세요.

:::

단축 기능 (Shortcuts)

Checkbox 컴포넌트는 자주 쓰이는 사용 사례를 위한 단축 기능 집합도 제공해요.

CheckboxControl

이 컴포넌트는 기본적으로 Checkbox.Indicator를 그 안에 렌더링해요.

이렇게 써도 되고:

<Checkbox.Control>
  <Checkbox.Indicator />
</Checkbox.Control>

인디케이터를 커스터마이즈할 필요가 없다면, 이렇게 더 간결하게 쓸 수도 있어요:

<Checkbox.Control />

예제 (Examples)

변형 (Variants)

Checkbox.Root 컴포넌트에 variant prop을 전달해 체크박스의 시각적 스타일을 바꿀 수 있어요.

색상 (Colors)

Checkbox.Root 컴포넌트에 colorPalette prop을 전달해 체크박스의 색상을 바꿀 수 있어요.

크기 (Sizes)

Checkbox.Root 컴포넌트에 size prop을 전달해 체크박스의 크기를 바꿀 수 있어요.

상태 (States)

Checkbox.Root 컴포넌트에 disabled 또는 invalid prop을 전달해 체크박스의 시각적 상태를 바꿀 수 있어요.

제어 (Controlled)

checked와 onCheckedChange prop을 사용해 체크박스의 상태를 제어할 수 있어요.

라벨 위치 (Label Position)

라벨 위치를 오른쪽으로 바꾸는 예시예요.

스토어 (Store)

체크박스를 제어하는 또 다른 방법으로 RootProvider 컴포넌트와 useCheckbox 스토어 훅을 사용할 수 있어요.

이렇게 하면 체크박스 바깥에서도 체크박스 상태와 메서드에 접근할 수 있어요.

구성 (Composition)

체크박스를 필드 컴포넌트와 조합하는 예시예요.

Hook Form

Checkbox 컴포넌트를 react-hook-form 라이브러리와 함께 사용하는 예시예요.

그룹 (Group)

CheckboxGroup 컴포넌트를 사용해 여러 체크박스를 함께 묶을 수 있어요.

그룹 Hook Form (Group Hook Form)

CheckboxGroup 컴포넌트를 react-hook-form 라이브러리와 함께 사용하는 예시예요.

커스텀 아이콘 (Custom Icon)

Checkbox.Control 안에 커스텀 아이콘을 렌더링해 체크박스의 아이콘을 바꿀 수 있어요.

불확정 상태 (Indeterminate)

checked prop을 indeterminate로 설정해 체크박스를 불확정(indeterminate) 상태로 보여줄 수 있어요.

설명 (Description)

체크박스에 추가 설명을 넣는 예시예요.

링크 (Link)

Checkbox.Label 안에 앵커 태그를 렌더링해 라벨에 링크를 추가할 수 있어요.

닫힌 컴포넌트 (Closed Component)

Checkbox를 닫힌 컴포넌트 조합으로 설정하는 방법이에요.

닫힌 컴포넌트를 프로젝트에 자동으로 추가하려면 다음 명령을 실행하세요:

npx @chakra-ui/cli snippet add checkbox

이렇게 사용해요:

<Checkbox>Accept terms and conditions</Checkbox>

가이드 (Guides)

CheckboxGroup + Field vs Fieldset

여러 체크박스를 다룰 때, Field와 Fieldset의 의미적 차이를 이해하는 것이 중요해요:

  • 단일 체크박스 (Single Checkbox): 라벨과 도움말 텍스트가 있는 올바른 폼 필드 구조를 위해 Field.Root로 감싸세요
  • CheckboxGroup: Field.Root가 아니라 Fieldset.Root로 감싸세요

체크박스 그룹은 관련 옵션들의 모음이므로, 단일 필드가 아니라 legend가 있는 fieldset으로 마크업해야 해요. CheckboxGroup을 Field.Root로 감싸면 첫 번째 체크박스만 클릭에 반응하는 상호작용 문제가 발생할 수 있어요.

✅ 올바른 사용법:

<Fieldset.Root>
  <CheckboxGroup name="framework">
    <Fieldset.Legend>Select framework</Fieldset.Legend>
    {/* ... checkboxes ... */}
  </CheckboxGroup>
</Fieldset.Root>

❌ 잘못된 사용법:

// Don't wrap CheckboxGroup with Field.Root
<Field.Root>
  <CheckboxGroup>{/* ... checkboxes ... */}</CheckboxGroup>
</Field.Root>

Props

Root

탐색기 (Explorer)

Checkbox 컴포넌트의 파트들을 인터랙티브하게 탐색해 보세요. 사이드바에서 파트를 클릭하면 미리보기에서 해당 파트가 강조 표시돼요.

더 알아보기 (Learn more)