React Native 에서 차트 구현 - 3. 라인차트 레전드 기능
2023. 4. 25.
1. 개요
이전 글들에서는 라인차트의 기본 기능 및 옵션 기능을 구현해보았다.
오늘은 차트의 레전드(범례) 기능을 구현해보자.
2. 구현
레전드를 구현하는 방법은 두 가지가 있다.
- 하나는 차트와 동일하게 SVG + D3.js 조합을 사용하는 것.
- 다른 하나는 일반 컴포넌트를 사용하는 것.
(웹에서는<div />
등의 엘리먼트들. React Native 환경에서는<View />
,<Text />
등)
웹에서라면 두 방법 모두 상황과 취향에 따라 선택하면 된다.
- 전자의 경우 D3.js 가 직접 DOM 을 제어할 수 있기 때문에 차트 구현과 레전드 구현을 일관되게 관리할 수 있다는 점과,
<svg />
의viewBox
속성을 통해 크기를 같이 관리할 수 있다는 점 등등의 장점이 있다. - 반면 후자는 flexbox 등의 CSS 를 사용해 쉽게 구현할 수 있다는 장점이 있다.
하지만 React Native 환경에서는 후자를 추천한다.
- 왜냐하면 전자의 경우 웹과 달리 D3.js 가 컴포넌트를 직접 그릴 수 없는 상황이어서 SVG 컴포넌트들에 좌표값을 일일이 넣어줘야 하는데 이게 생각보다 번거롭고, 레전드 내부의 요소들을 예쁘게 정렬하겠다며
onLayout()
과 조합해 좌표를 여러 번 보정할 경우에는 성능이 정말 좋지 않다.
"웹에서는 비슷한 구현을 SVG + D3.js 로 해도 성능이 나쁘지 않았다." 라는 기억만 가지고 작업을 진행했다가 고생한 경험이 있다. - 반면 후자의 경우 flexbox 를 사용해 구현하면 쉽기도 하거니와 성능적으로 걱정할 필요가 없다.
따라서 이 글에서도 레전드는 <View />
와 <Text />
를 활용해서 구현한다.