Collapsible

Collapsible

추가 콘텐츠를 펼치거나 접을 때 사용하는 컴포넌트예요. 아코디언 같은 UI를 만들 때 유용해요.

출처: 문서

본문

사용법 (Usage)

import { Collapsible } from "@chakra-ui/react"
<Collapsible.Root>
  <Collapsible.Trigger>
    <Collapsible.Indicator />
  </Collapsible.Trigger>
  <Collapsible.Content />
</Collapsible.Root>

예시 (Examples)

초기 열림 (Initial Open)

defaultOpen prop을 사용하면 콜랩시블을 기본적으로 열린 상태로 렌더링할 수 있어요.

부분 높이 (Partial Height)

collapsedHeight prop을 사용하면 접힌 상태에서 콘텐츠의 미리보기를 보여줄 수 있어요.

비활성화 (Disabled)

disabled prop을 사용하면 콜랩시블을 토글할 수 없게 만들 수 있어요.

제어 (Controlled)

open과 onOpenChange prop을 사용하면 콜랩시블 상태를 제어할 수 있어요.

스토어 (Store)

콜랩시블을 제어하는 또 다른 방법은 RootProvider 컴포넌트와 useCollapsible 스토어 훅을 사용하는 거예요.

지연 마운트 (Lazy Mounted)

unmountOnExit prop을 사용하면 접힐 때 콘텐츠를 언마운트할 수 있어요.

숨김 모드 (Hide Mode)

hideMode="activity"를 사용하면 접힌 콘텐츠를 마운트된 상태로 유지하면서 React가 그 하위 트리의 effects를 일시중지해요. 기본값인 display-none은 콘텐츠를 숨기지만 effects는 계속 실행되게 둬요.

이 모드는 React 19.2 이상이 필요하며, 이전 버전에서는 display-none으로 대체돼요. 또한 하위 트리를 숨기는 대신 제거하는 unmountOnExit과 함께 사용하면 효과가 없어요.

가이드 (Guides)

Collapsible context 접근

useCollapsibleContext를 사용하면 콜랩시블 안의 어떤 컴포넌트에서든 콜랩시블의 상태와 메서드에 접근할 수 있어요.

import { useCollapsibleContext } from "@chakra-ui/react"

const CollapsibleStatus = () => {
  const collapsible = useCollapsibleContext()

  return <div>Collapsible is {collapsible.open ? "open" : "closed"}</div>
}

const MyCollapsible = () => (
  <Collapsible.Root>
    <Collapsible.Trigger>Toggle</Collapsible.Trigger>
    <Collapsible.Content>
      <CollapsibleStatus />
    </Collapsible.Content>
  </Collapsible.Root>
)

프로그래밍적으로 닫기

context에서 setOpen(false)를 사용하면 콜랩시블을 프로그래밍적으로 닫을 수 있어요.

import { useCollapsibleContext } from "@chakra-ui/react"

const CloseButton = () => {
  const collapsible = useCollapsibleContext()

  return (
    <Button onClick={() => collapsible.setOpen(false)}>
      Close Collapsible
    </Button>
  )
}

const MyCollapsible = () => (
  <Collapsible.Root>
    <Collapsible.Trigger>Toggle</Collapsible.Trigger>
    <Collapsible.Content>
      <CloseButton />
    </Collapsible.Content>
  </Collapsible.Root>
)

콘텐츠 패딩 (Content Padding)

콜랩시블이 펼쳐지거나 접힐 때 애니메이션이 끊기는 것을 막으려면, Collapsible.Content에 직접 패딩을 적용하는 대신 안쪽 콘텐츠 요소에 패딩을 적용해서 애니메이션 중 시각적 떨림을 방지해 주세요.

이렇게 하세요 (DO THIS):

<Collapsible.Root>
  <Collapsible.Trigger>Toggle</Collapsible.Trigger>
  <Collapsible.Content>
    <Box padding="4" borderWidth="1px">
      {/* Content here */}
    </Box>
  </Collapsible.Content>
</Collapsible.Root>

이렇게 하지 마세요 (NOT THIS):

<Collapsible.Root>
  <Collapsible.Trigger>Toggle</Collapsible.Trigger>
  {/* ❌ Avoid applying padding directly to Content */}
  <Collapsible.Content padding="4" borderWidth="1px">
    {/* Content here */}
  </Collapsible.Content>
</Collapsible.Root>

Props

Root

Collapsible 컴포넌트의 Root 부분에 전달할 수 있는 prop을 확인해 주세요.

Explorer

Collapsible 컴포넌트의 각 부분을 인터랙티브하게 탐색해 보세요. 사이드바에서 부분을 클릭하면 미리보기에서 강조 표시돼요.

더 알아보기 (Learn more)

Chakra UI의 Collapsible 컴포넌트에 대해 더 자세히 알아보려면 공식 문서와 Ark UI Collapsible 문서를 확인해 보세요.