๐Ÿถ๐Ÿพ/frontend

[redux] react์—์„œ redux-toolkit ์‚ฌ์šฉ

onieyh 2024. 2. 7. 21:48

๊ฐœ์ธํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•  ๋•Œ๋„ ๊ณ„์† props๋กœ ์—ฐ๊ฒฐ-์—ฐ๊ฒฐํ•ด์„œ ๋„˜๊ฒจ์•ผํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๊ท€์ฐฎ์Œ๊ณผ .. ๊ทธ๋ ‡๊ฒŒ ๊ณ„์† ์ž์‹์œผ๋กœ ๋„˜๊ธฐ๋‹ค๋ณด๋‹ˆ

์—ฐ๊ด€๋˜์ง€ ์•Š์€ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๋“ค๊นŒ์ง€ ๋ฆฌ๋žœ๋”๋ง์ด ๋˜์–ด์•ผํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๋ฌธ์ œ๋ฅผ ๋Š๋ผ๊ณ  ์žˆ๋Š” ์™€์ค‘

์ƒํ™œ์ฝ”๋”ฉ ๋ฆฌ๋•์Šค ๊ฐ•์˜๋ฅผ ํ†ตํ•ด ์ƒˆ๋กœ์šด ์ƒํƒœ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ•์„ ์•Œ๊ฒŒ ๋˜๊ณ , ์ด์–ด ๋ฆฌ๋•์Šค ํˆดํ‚ท๊นŒ์ง€ ์•Œ๊ฒŒ๋˜์—ˆ๋‹ค.

 

redux

- js ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ 

- store๋ผ๋Š” ํ•˜๋‚˜๋ฟ์ธ ๋ฐ์ดํ„ฐ ๊ณต๊ฐ„

- action์„ ํ†ตํ•ด์„œ ์ƒํƒœ ๋ณ€๊ฒฝ

- ๋ณ€๊ฒฝ์€ ์ˆœ์ˆ˜ ํ•จ์ˆ˜๋กœ๋งŒ ๊ฐ€๋Šฅ 

 

 

๐ŸŒŸ store

์ƒํƒœ๊ฐ€ ๊ด€๋ฆฌ๋˜๋Š” ํ•˜๋‚˜์˜ ๊ณต๊ฐ„

 

๐ŸŒŸ action

store์— ์šด๋ฐ˜ํ•  ๋ฐ์ดํ„ฐ 

 

๐ŸŒŸ reducer

action์„ reducer๊ฐ€ ๋ฐ›์•„ store์˜ ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธ

 

๐ŸŒŸ dispatch

store์˜ ๋‚ด์žฅํ•จ์ˆ˜ ์ค‘ ํ•˜๋‚˜๋กœ action์„ ๋ฐœ์ƒ์‹œํ‚ด

action์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌํ•˜๊ณ  reducer๋ฅผ ํ˜ธ์ถœ 

 

๐Ÿ“ action ๊ฐ์ฒด๊ฐ€ dispatch()๋ฅผ ํ†ตํ•ด reducerํ˜ธ์ถœ โžก๏ธ reducer๋Š” ์ƒˆ๋กœ์šด store๋ฅผ ์ƒ์„ฑ 

 

 

redux-toolkit 

๋ฆฌ๋•์Šค ์‚ฌ์šฉ์„ ๋” ์‰ฝ๊ฒŒ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ & ์ „์ฒด์ ์ธ ์ฝ”๋“œ๋Ÿ‰์„ ์ค„์ž„

 

์‚ฌ์šฉ

npm install @reduxjs/toolkit

 

 

store.js

import { configureStore } from "@reduxjs/toolkit";
import dateReducer from "./dateSlice";

const store = configureStore({
  reducer: {
    date: dateReducer,
  },
});

export default store;

 

configureStore()๋ฅผ ํ†ตํ•ด store์ƒ์„ฑ

 

 

dateSlice.js

import { createSlice } from "@reduxjs/toolkit";
import dayjs from "dayjs";

const dateSlice = createSlice({
  name: "date",
  initialState: {
    date: dayjs().format("YYYY-MM-DD"),
  },
  reducers: { // reducers 's' ๋ถ™๋Š”๊ฑฐ ์ฃผ์˜ 
    setDate: (state, action) => {
      state.date = action.payload;
      // ์ž๋™ ์ƒ์„ฑ๋˜๋Š” actionCreate๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•˜๋ฉด payload๋กœ ๋ฐ›์•„์•ผํ•จ
      // ๋ถˆ๋ณ€์„ฑ ์œ ์ง€ํ•  ํ•„์š”์—†
    },
    resetDate: (state) => {
      state.date = dayjs().format("YYYY-MM-DD");
    },
  },
});

export default dateSlice.reducer;
export const { setDate, resetDate } = dateSlice.actions;

 

 

์ƒํƒœ ์‚ฌ์šฉ

const date = useSelector((state) => state.date.date); // useSelector๋ฅผ ํ†ตํ•ด ๊ฐ€์ ธ์˜ด state.(name).(value)

const dispatch = useDispatch();

// dispatch(์•ก์…˜์ด๋ฆ„(newState)) ์ฒ˜๋Ÿผ ์•„๋ž˜ ์‚ฌ์šฉ

<StaticDatePicker value={dayjs(date)} onChange={(e) => dispatch(setDate(e.format("YYYY-MM-DD")))} />

 

 

๋ฐ˜์‘ํ˜•