자바스크립트 Immer를 활용한 동적 차트 애플리케이션 만들기
개요
이번 포스트에서는 자바스크립트의 Immer 라이브러리를 활용하여 동적 차트 애플리케이션을 만들어보겠습니다.
Immer는 불변성을 유지하는 데 도움이 되는 라이브러리로, 복잡한 상태 관리 로직을 간결하게 작성할 수 있도록 도와줍니다. 이를 활용하여 동적으로 데이터를 업데이트하고 차트를 그릴 수 있는 애플리케이션을 구현해보겠습니다.
사전 준비
이 예제에서는 다음과 같은 기술 스택을 사용합니다.
- 자바스크립트 (ES6+)
- React
- Immer
- Chart.js
위 기술들에 대한 기본적인 이해가 있다는 가정하에 진행하겠습니다.
설치 및 설정
프로젝트 생성
$ npx create-react-app dynamic-chart-app
의존성 설치
$ cd dynamic-chart-app
$ npm install immer react-chartjs-2 chart.js
애플리케이션 구현
상태 관리
먼저, Immer를 활용하여 상태를 관리하는 코드를 작성해보겠습니다. 다음은 초기 상태와 액션을 처리하는 리듀서 함수입니다.
import produce from 'immer';
const initialState = {
data: [],
};
const reducer = (state = initialState, action) => {
return produce(state, draft => {
switch (action.type) {
case 'ADD_DATA':
draft.data.push(action.payload);
break;
case 'REMOVE_DATA':
draft.data.splice(action.payload, 1);
break;
default:
break;
}
});
};
컴포넌트 구현
다음으로, 차트를 표시하고 데이터를 추가 및 제거할 수 있는 컴포넌트를 구현해보겠습니다.
import React, { useState } from 'react';
import { Bar } from 'react-chartjs-2';
import { useDispatch, useSelector } from 'react-redux';
const ChartComponent = () => {
const [dataPoint, setDataPoint] = useState('');
const dispatch = useDispatch();
const data = useSelector(state => state.data);
const handleAddData = () => {
dispatch({ type: 'ADD_DATA', payload: dataPoint });
setDataPoint('');
};
const handleRemoveData = (index) => {
dispatch({ type: 'REMOVE_DATA', payload: index });
};
return (
<div>
<Bar
data={{
labels: data.map((d, index) => `Data ${index + 1}`),
datasets: [
{
label: 'Chart Data',
data: data,
backgroundColor: 'rgba(75, 192, 192, 0.2)',
borderColor: 'rgba(75, 192, 192, 1)',
borderWidth: 1,
},
],
}}
options={{
maintainAspectRatio: false,
}}
/>
<input
type="text"
value={dataPoint}
onChange={(e) => setDataPoint(e.target.value)}
/>
<button onClick={handleAddData}>Add Data</button>
<ul>
{data.map((d, index) => (
<li key={index}>
Data {index + 1}: {d}
<button onClick={() => handleRemoveData(index)}>Remove</button>
</li>
))}
</ul>
</div>
);
};
export default ChartComponent;
애플리케이션 라우팅
마지막으로, 애플리케이션의 라우팅을 구현하고 차트 컴포넌트를 사용하는 코드를 작성해보겠습니다.
import React from 'react';
import { BrowserRouter as Router, Switch, Route } from 'react-router-dom';
import ChartComponent from './ChartComponent';
const App = () => {
return (
<Router>
<Switch>
<Route path="/" exact component={ChartComponent} />
</Switch>
</Router>
);
};
export default App;
결론
이제 자바스크립트의 Immer 라이브러리를 활용하여 동적 차트 애플리케이션을 만들었습니다. Immer의 강력한 기능을 활용하여 복잡한 상태 관리 로직을 간단하게 작성할 수 있습니다. 차트 라이브러리인 Chart.js와 조합하여 데이터를 추가 및 제거하고 차트를 표시할 수 있는 기능을 구현했습니다. 이제 이 애플리케이션을 확장하거나 커스터마이징하여 원하는 동적 차트 기능을 구현할 수 있습니다.
#javascript #immer #차트