React에서 State는 컴포넌트에서 데이터를 관리하는 객체이다. 상태는 React 애플리케이션의 동적인 데이터를 표현하며, 변경될 때마다 컴포넌트가 다시 렌더링된다.
React에서 상태는 3가지 유형으로 나뉜다:
Local State
Cross-Component State
props를 사용하여 부모 → 자식으로 전달하지만, 상태가 많아질수록 관리가 복잡해진다.App-Wide State
Cross-Component State와 App-Wide State 일 때 Context API 또는 Redux 같은 전역 상태 관리 도구가 필요하다.
Redux는 JavaScript 상태 관리 라이브러리이다. React와 함께 가장 많이 사용되며, 컴포넌트가 많아질수록 발생하는 상태 관리의 복잡성을 해결해준다.
Redux의 핵심은 모든 상태를 한 곳에서 관리하는 것이다.
props를 계속 전달해야 하는 문제를 해결한다.props 없이 중앙 저장소에서 상태를 바로 가져올 수 있다.Redux를 제대로 이해하려면 4가지 용어를 알아야 한다.
type 속성을 가져야 하며, 추가 데이터는 payload로 전달한다.const action = { type: "INCREMENT", payload: 1 };dispatch({ type: "INCREMENT", payload: 1 });
const reducer = (state = 0, action) => {
switch (action.type) {
case "INCREMENT":
return state + action.payload;
default:
return state;
}
};Redux는 별도로 설치해야 한다.
npm install redux react-redux
createStore를 사용해 스토어를 생성한다.
import { createStore } from "redux";
const store = createStore(reducer);
디스패치를 통해 액션을 스토어로 전달한다.
store.dispatch({ type: "INCREMENT", payload: 1 });
Redux와 React를 결합하기 위해 react-redux 라이브러리를 사용한다.
설치 명령어
npm install redux react-redux @reduxjs/toolkit
@reduxjs/toolkit 는
Provider로 전역 상태 제공Provider 컴포넌트를 사용해 애플리케이션 전체에 Redux 스토어를 제공한다.
import { Provider } from "react-redux";
<Provider store={store}>
<App />
</Provider>;
useSelector로 상태 조회useSelector는 Redux 스토어에서 상태를 조회하는 Hook이다.
import { useSelector } from "react-redux";
const count = useSelector((state) => state.counter);
useDispatch로 액션 디스패치useDispatch는 Redux 액션을 발생시키는 Hook이다.
인자로 원하는 Action 객체를 넘겨줘야 한다.
import { useDispatch } from "react-redux";
const dispatch = useDispatch();
dispatch({ type: "INCREMENT" });
Redux Toolkit은 Redux의 복잡성을 줄이고 사용성을 개선하기 위한 도구이다.
configureStore
import { configureStore } from "@reduxjs/toolkit";
const store = configureStore({ reducer: rootReducer });
createSlice
import { createSlice } from "@reduxjs/toolkit";
const counterSlice = createSlice({
name: "counter",
initialState: 0,
reducers: {
increment: (state) => state + 1,
decrement: (state) => state - 1,
},
});
export const { increment, decrement } = counterSlice.actions;
export default counterSlice.reducer;
Redux DevTools는 상태를 시각적으로 확인할 수 있는 디버깅 도구이다.
먼저 크롬 확장 프로그램에서 Redux DevTools 를 설치한다.
그다음 명령어를 사용해 리액트 앱에 적용한다.
npm install --save @redux-devtools/extension
import { composeWithDevTools } from "@redux-devtools/extension";
const store = configureStore({
reducer: rootReducer,
devTools: composeWithDevTools(),
});
