[react] 리액트 네이티브에서의 리덕스 모듈 분리하기
리액트 네이티브 앱을 개발할 때, 리덕스(Redux)를 사용해 전역 상태를 관리하는 것은 일반적인 방법입니다. 그러나 상태와 관련된 액션과 리듀서가 많아질 수록 코드가 길어지고 복잡해지는데요. 이 문제를 해결하기 위해 리덕스 모듈을 분리하는 방법에 대해 알아보겠습니다.
1. 리덕스 모듈이란?
리덕스 모듈이란, 액션, 액션 생성자, 리듀서를 한 곳에 모아놓은 파일을 말합니다. 이를 통해 특정 기능에 따른 액션과 상태를 하나의 모듈로 묶어서 사용할 수 있습니다.
2. 리덕스 모듈 분리하기
먼저, 기능에 따라 디렉토리를 생성하여 액션과 리듀서를 분리합니다. 다음은 간단한 카운터 예제를 통해 리덕스 모듈을 어떻게 분리하는지 알아보겠습니다.
2.1 카운터 리덕스 모듈 생성하기
modules
디렉토리를 생성하고, 그 안에 counter.js
파일을 만듭니다.
// modules/counter.js
// 액션 타입 정의
const INCREASE = 'counter/INCREASE';
const DECREASE = 'counter/DECREASE';
// 액션 생성자 함수
export const increase = () => ({ type: INCREASE });
export const decrease = () => ({ type: DECREASE });
// 초기 상태
const initialState = {
count: 0,
};
// 리듀서 함수
function counter(state = initialState, action) {
switch (action.type) {
case INCREASE:
return {
...state,
count: state.count + 1,
};
case DECREASE:
return {
...state,
count: state.count - 1,
};
default:
return state;
}
}
export default counter;
2.2 루트 리듀서에서 모듈 추가하기
루트 리듀서에서 앞에서 생성한 카운터 모듈을 추가합니다.
// rootReducer.js
import { combineReducers } from 'redux';
import counter from './modules/counter';
const rootReducer = combineReducers({
counter,
// 다른 모듈들 추가 가능
});
export default rootReducer;
2.3 스토어 생성하기
마지막으로 스토어를 생성할 때, 루트 리듀서를 적용합니다.
// store.js
import { createStore } from 'redux';
import rootReducer from './rootReducer';
const store = createStore(rootReducer);
export default store;
이렇게 하면 카운터에 관련된 액션과 상태를 한 파일에 모듈화하여 사용할 수 있습니다.
3. 리액트 네이티브에서의 활용
리액트 네이티브 앱에서 위에서 생성한 스토어를 사용하기 위해, Provider
컴포넌트로 앱을 감싸고, connect
함수를 사용하여 컴포넌트와 리덕스를 연결합니다.
// App.js
import React from 'react';
import { Provider } from 'react-redux';
import store from './store';
import CounterContainer from './containers/CounterContainer';
const App = () => {
return (
<Provider store={store}>
<CounterContainer />
</Provider>
);
};
export default App;
위와 같이 리액트 네이티브에서 리덕스 모듈을 분리하고 사용하는 방법을 통해 코드의 가독성을 높일 수 있으며, 유지보수가 용이해질 수 있습니다.
위 내용들을 따라하면 리액트 네이티브 앱에서 리덕스를 모듈화하여 사용할 수 있습니다.
참고 자료: 리액트 네이티브 공식 문서, 리덕스 공식 문서