🔎 유용한 정보
리액트의 useState, useContext만으로도 상태 관리는 가능하지만,
규모가 커지면 복잡도도 같이 폭발합니다.
그래서 실무에서는 전역 상태 관리 도구인 Redux를 많이 사용하며,
최근에는 Redux Toolkit이 표준처럼 사용되고 있습니다.
1. Redux Toolkit이란?
- Redux를 더 간결하고 쉽게 사용하도록 만든 공식 툴킷
- store, slice, dispatch 개념을 중심으로 구성
- 복잡했던 boilerplate 코드들을 최소화
2. 설치하기
npm install @reduxjs/toolkit react-redux
3. 폴더 구조 예시
src/
├── app/
│ └── store.js
├── features/
│ └── counter/
│ ├── counterSlice.js
├── App.js
4. 예제: 숫자 카운터 만들기
📄 app/store.js
import { configureStore } from "@reduxjs/toolkit";
import counterReducer from "../features/counter/counterSlice";
export const store = configureStore({
reducer: {
counter: counterReducer,
},
});
📄 features/counter/counterSlice.js
import { createSlice } from "@reduxjs/toolkit";
const initialState = {
value: 0,
};
const counterSlice = createSlice({
name: "counter",
initialState,
reducers: {
increment: (state) => {
state.value += 1;
},
decrement: (state) => {
state.value -= 1;
},
},
});
export const { increment, decrement } = counterSlice.actions;
export default counterSlice.reducer;
📄 index.js (store 연결)
import React from "react";
import ReactDOM from "react-dom/client";
import App from "./App";
import { Provider } from "react-redux";
import { store } from "./app/store";
const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(
<Provider store={store}>
<App />
</Provider>
);
📄 App.js
import { useSelector, useDispatch } from "react-redux";
import { increment, decrement } from "./features/counter/counterSlice";
function App() {
const count = useSelector((state) => state.counter.value);
const dispatch = useDispatch();
return (
<div>
<h1>Redux 카운터</h1>
<h2>{count}</h2>
<button onClick={() => dispatch(increment())}>+ 증가</button>
<button onClick={() => dispatch(decrement())}>- 감소</button>
</div>
);
}
export default App;
5. 핵심 요약
개념 설명
store | 앱 전체의 상태 트리 |
slice | 상태 조각과 액션 정의 |
dispatch() | 액션을 발생시키는 함수 |
useSelector() | 상태 읽기 |
useDispatch() | 액션 보내기 |
'📁 [4] 개발자 정보 & 코드 노트 > REACT' 카테고리의 다른 글
📘 리액트 강의 12편 - 성능 최적화 전략 (React.memo, useMemo, useCallback) (0) | 2025.04.12 |
---|---|
📘 리액트 강의 11편 - Axios로 서버와 통신하고 API 연동하기 (0) | 2025.04.12 |
📘 리액트 강의 9편 - React Router로 페이지 전환 구현하기 (0) | 2025.04.12 |
📘 리액트 강의 8편 - Context API로 전역 상태 공유하기 (0) | 2025.04.12 |
📘 리액트 강의 7편 - 커스텀 훅과 성능 최적화 (useMemo, useCallback) (0) | 2025.04.12 |
🔎 유용한 정보