Redux는 자바스크립트 앱에서 상태를 효율적으로 관리하기 위한 라이브러리다. 주로 React와 함께 사용되지만, 다른 라이브러리나 프레임워크에서도 사용 가능하다.
먼저 프로젝트에 Redux를 설치한다.
npm install redux react-redux
Action 객체를 반환하는 함수를 정의한다.
// src/store/actions/counterActions.js
export const increment = () => {
return {
type: "INCREMENT",
};
};
Reducer는 상태와 액션을 받아 새로운 상태를 반환한다.
// src/store/reducers/counterReducer.js
const initialState = 0;
const counterReducer = (state = initialState, action) => {
switch (action.type) {
case 'INCREMENT':
return state + 1;
default:
return state;
}
};
export default counterReducer;
여러 개의 리듀서를 하나로 합치는 Root Reducer를 만든다.
// src/store/reducers/index.js
import { combineReducers } from "redux";
import counterReducer from "./counterReducer";
const rootReducer = combineReducers({
counter: counterReducer,
});
export default rootReducer;
Store를 생성하고, React 앱에 연결한다.
// src/main.js
import React from "react";
import ReactDOM from "react-dom/client";
import { createStore } from "redux";
import { Provider } from "react-redux";
import App from "./App";
import rootReducer from "./store/reducers";
const store = createStore(rootReducer);
ReactDOM.createRoot(document.getElementById("root")).render(
<React.StrictMode>
<Provider store={store}>
<App />
</Provider>
</React.StrictMode>
);
react-redux
의 useSelector
와 useDispatch
훅을 사용한다.
// src/App.js
import React from "react";
import { useDispatch, useSelector } from "react-redux";
import { increment } from "./store/actions/counterActions";
function App() {
const count = useSelector((state) => state.counter);
const dispatch = useDispatch();
return <button onClick={() => dispatch(increment())}>Count: {count}</button>;
}
export default App;
이제 리덕스를 통해 상태 관리가 가능하다. useSelector
로 상태에 접근할 때 state.counter
로 접근하는 것에 주의하자. 이렇게 되는 이유는 combineReducers
에서 counter
로 설정했기 때문이다.
미들웨어를 통해 액션을 디스패치하기 전후로 로직을 넣을 수 있다.
이것은 Redux의 기본적인 개념과 사용 방법에 대한 소개다. 더 자세한 내용은 공식 문서에서 확인할 수 있다.