Immer는 자바스크립트의 불변성 유지를 도와주는 라이브러리입니다. 이번 포스트에서는 Immer를 활용하여 대시보드 애플리케이션을 만들어보겠습니다.
사용할 기술 스택
- React
- Redux
- Immer
대시보드 애플리케이션 구조
대시보드 애플리케이션은 여러 개의 위젯으로 구성되어 있습니다. 각 위젯은 사용자가 선택한 데이터를 보여주고, 필요에 따라 수정할 수 있는 기능을 제공합니다. Immer를 사용하여 애플리케이션의 상태를 관리하면서 불변성을 유지할 수 있습니다.
프로젝트 설정
먼저, React 애플리케이션을 생성합니다.
npx create-react-app dashboard-app
다음으로, 필요한 패키지들을 설치합니다.
cd dashboard-app
npm install redux immer
Redux 설정
Redux를 사용하여 애플리케이션의 상태를 관리합니다. 이때, Immer를 활용하여 불변성을 유지하며 상태를 업데이트할 수 있습니다.
1. 상태 정의
먼저, 애플리케이션의 상태를 정의합니다. 이 예시에서는 대시보드에 표시할 데이터와 선택한 위젯의 정보를 저장할 것입니다.
// src/redux/store.js
import { createStore } from 'redux';
const initialState = {
data: [],
selectedWidget: null,
};
function reducer(state = initialState, action) {
switch (action.type) {
case 'SET_DATA':
return {
...state,
data: action.payload,
};
case 'SELECT_WIDGET':
return {
...state,
selectedWidget: action.payload,
};
default:
return state;
}
}
const store = createStore(reducer);
export default store;
2. 액션 생성 함수 작성
액션 생성 함수는 액션 객체를 생성하는 함수입니다. 여기서는 데이터를 설정하거나 위젯을 선택하는 액션을 생성하는 함수를 작성합니다.
// src/redux/actions.js
export function setData(data) {
return { type: 'SET_DATA', payload: data };
}
export function selectWidget(widget) {
return { type: 'SELECT_WIDGET', payload: widget };
}
3. 컴포넌트와 Redux 연동
애플리케이션의 컴포넌트들을 Redux와 연동하여 상태를 업데이트하고, 필요한 데이터를 가져올 수 있도록 설정합니다.
// src/App.js
import React from 'react';
import { useDispatch, useSelector } from 'react-redux';
import { selectWidget, setData } from './redux/actions';
function App() {
const dispatch = useDispatch();
const data = useSelector((state) => state.data);
const selectedWidget = useSelector((state) => state.selectedWidget);
// 데이터 설정
React.useEffect(() => {
// 데이터를 가져오는 비동기 함수 호출
// ...
dispatch(setData(data));
}, [dispatch]);
// 위젯 선택
function handleWidgetClick(widget) {
dispatch(selectWidget(widget));
}
return (
<div>
{/* 위젯 컴포넌트들 */}
{/* ... */}
</div>
);
}
export default App;
Immer를 활용한 불변성 유지
애플리케이션의 상태를 Immer를 이용하여 불변성을 유지하며 업데이트할 수 있습니다. Immer를 사용하면 복잡한 불변성 로직을 작성하지 않고도 간편하게 상태를 업데이트할 수 있습니다.
예를 들어, 위젯을 선택할 때 해당 위젯에 대한 정보를 상태에 반영하기 위해 produce
함수를 사용할 수 있습니다.
const newState = produce(currentState, (draft) => {
draft.selectedWidget = widget;
// 필요한 상태 업데이트
});
이러한 방식으로 Immer를 활용하여 대시보드 애플리케이션에서 상태를 업데이트할 수 있습니다.
마무리
Immer를 활용하여 불변성을 유지하며 대시보드 애플리케이션을 만들어보았습니다. Immer는 Redux와 함께 사용하면 코드를 더 간결하고 유지보수하기 쉽게 만들어줍니다.
#React #Immer