포스코x코딩온 웹 풀스택 양성과정
[포스코x코딩온] 웹 풀스택 과정 14주차 회고 | React Redux
Codult
2024. 4. 5. 15:20
728x90

📌 react에 redux 적용하기
- 모듈 설치
npm i react-redux @reduxjs/toolkit
※ @reduxjs.toolkit: redux의 복잡성을 줄이기 위해 만들어진 도구
💡 Provider
- Provider를 이용하여 index.js로 store을 가져온다.
- 해당 Provider 하위에 있는 컴포넌트는 store 접근이 가능하다.
import React from "react";
import ReactDOM from "react-dom/client";
import App from "./App";
import { Provider } from "react-redux";
import store from "./sotre";
const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(
<React.StrictMode>
<Provider store={store}>
<App />
</Provider>
</React.StrictMode>
);
💡 useSelector, useDispatch
useSelector()
- store의 상태값을 조회하기 위한 hook 함수이다.
- 함수를 인자로 넘겨주며, 해당 함수는 store의 state를 매개변수로 받을 수 있고, return 값으로 원하는 state 변수 값을 설정한다.
useDispatch()
- 액션을 발생시키는 dispatch 함수를 실행하는 hook 함수이다.
- 원하는 액션 객체를 인자로 받아 실행한다.
import { useState } from "react";
import { useSelector, useDispatch } from "react-redux";
export default function Main() {
const [text, setText] = useState("");
const todos = useSelector((state) => state);
// store의 state가 배열일 때는 이렇게 return 값 가져올 수 있다.
// state가 { counter: 100 }과 같이 객체 형태인 경우, (state) => state.counter로 접근해야 값을 가져올 수 있다.
const dispatch = useDispatch();
const onSubmit = (e) => {
e.preventDefault();
dispatch({ type: ADD_TODO, text });
setText("");
};
const onClick = (id) => {
dispatch({ type: DELETE_TODO, id });
};
};
💡 redux toolkit - createSlice, configureStore
createSlice()
- 리듀서와 액션을 함께 생성하는 함수이다.
import { createSlice } from "@reduxjs/toolkit";
const counterSlice = createSlice({
name: "counter",
initialState: { counter: 100 }, // state 초기값을 설정한다.
// 사용할 액션을 정의한다. (switch문 없이 바로 함수 사용)
reducer: {
increment(state, action) {
state.counter++;
},
decrement(state) {
state.counter--;
},
calculator(state, action) {
console.log(action);
const { ten, minus } = action.payload; // action의 payload로 전달받은 값을 가져올 수 있다.
state.counter = state.counter + ten + minus;
}
}
});
export const counterAction = counterSlice.actions;
exports default counterSlice.reducer;
configureStore()
- redux store을 생성하기 위한 함수이다. (기존의 createStore 기능)
- configureStore을 통해 여러 리듀서를 하나로 통합하여 관리할 수 있다.
import { configureStore } from "@reduxjs/toolkit";
import counterSlice from "./counter";
import loginSlice from "./login";
const store = configureStore({
reducer: { count: counterSlice, login: loginSlice },
}):
export default store;728x90