차트
차트 (Charts)
Chakra UI의 차트는 기본 설정만으로도 멋지게 보이도록 설계되어 있으며, Chakra UI의 다른 테마 시스템과 자연스럽게 통합되어요. 차트는 recharts 위에 구축되어 있어요.
출처: 문서
본문
차트는 Chakra UI의 테마 시스템과 매끄럽게 통합되어 있어서, 별다른 설정 없이도 잘 어울리는 모양을 바로 만들어낼 수 있어요. 차트는 recharts를 기반으로 구축되어 있답니다.
설치 (Installation)
차트와 그 피어 의존성(peer dependencies)을 설치하려면 다음 명령을 실행하세요.
npm i @chakra-ui/charts recharts
사용법 (Usage)
:::steps
차트 컴포넌트 import 하기
대부분의 경우 @chakra-ui/charts 패키지에서 Chart와 useChart 훅을 import 하고, 이를 recharts의 컴포넌트들과 함께 조합해 사용해요.
import { Chart, useChart } from "@chakra-ui/charts"
import { Bar, BarChart, XAxis, YAxis } from "recharts"
차트 데이터 정의하기
useChart 훅에 차트 데이터를 전달해 차트 인스턴스를 만들 수 있어요.
useChart훅에 대해 더 알아보세요.
const chart = useChart({
data: [
{ month: "January", value: 100 },
{ month: "February", value: 200 },
],
})
차트 렌더링하기
recharts 라이브러리에서 필요한 차트 종류에 따라, 차트 컴포넌트를 Chart.Root 컴포넌트로 감싸주면 돼요.
<Chart.Root chart={chart}>
<BarChart data={chart.data}>
{chart.series.map((item) => (
<Bar
key={item.name}
dataKey={chart.key(item.name)}
fill={chart.color(item.color)}
/>
))}
</BarChart>
</Chart.Root>
:::
커스터마이징 (Customization)
차트 컴포넌트는 Recharts 위에 구축되어 있어서, Recharts가 제공하는 모든 커스터마이징 옵션을 그대로 사용할 수 있어요.
색상 (Colors)
useChart 훅은 color 함수를 제공하는데, 이 함수를 사용해 recharts의 차트 컴포넌트에 쓸 시맨틱 색상을 조회할 수 있어요.
<CartesianGrid stroke={chart.color("border.muted")} />
포맷터 (Formatters)
useChart 훅은 formatDate와 formatNumber 함수를 제공하는데, 각각 날짜와 숫자를 포맷하는 데 사용해요. x, y 축 라벨이나 툴팁을 포맷할 때 유용하답니다.
// x축 라벨 포맷하기
<XAxis tickFormatter={chart.formatDate({ month: "short", day: "2-digit" })} />
// y축 라벨 포맷하기
<YAxis tickFormatter={chart.formatNumber({ maximumFractionDigits: 1 })} />
FAQ
React 19에서 "lanes" is read-only 에러
이 에러는 recharts 3.6+를 React 19와 함께 사용할 때 발생해요. recharts가 Redux를 통해 사용하는 immer 11.0.0의 버그 때문이랍니다. 해결 방법은 immer를 11.0.1 이상 버전으로 해석(resolve)되도록 하는 거예요.
package.json에 override를 추가하세요:
:::code-group
{
"pnpm": {
"overrides": {
"immer": ">=11.0.1"
}
}
}
{
"overrides": {
"immer": ">=11.0.1"
}
}
{
"resolutions": {
"immer": ">=11.0.1"
}
}
:::
그런 다음 패키지 매니저의 설치 명령을 실행해 변경 사항을 적용하면 돼요.
ResponsiveContainer vs responsive prop
차트 컴포넌트를 ResponsiveContainer로 감싸는 대신, 차트 컴포넌트의 responsive prop을 사용하세요. responsive prop(recharts 3.3+에서 사용 가능)이 권장되는 방식이며, ResponsiveContainer가 리사이즈 기반의 상태 업데이트로 인해 유발할 수 있는 React 19 호환성 문제를 피할 수 있어요.
<Chart.Root chart={chart}>
<BarChart data={chart.data} responsive>
{/* ... */}
</BarChart>
</Chart.Root>
더 알아보기 (Learn more)
- Recharts — 차트의 기반 라이브러리
useChart훅