[๋ฐ๋ธŒ์ฝ”์Šค] React-Task-App: configureStore ์‹ฌ์ธต ๋ถ„์„ ๋ฐ ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ ๊ณผ์ •์—์„œ์˜ ํƒ€์ž… ํ™œ์šฉ ์ •๋ฆฌ

2025. 6. 21. 15:46ยท๐Ÿ•Š๏ธํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฐ๋ธŒ์ฝ”์Šค/TIL

โŒconfigureStore์—์„œ composeWithDevtools๋ฅผ ์“ฐ๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

๊ฐœ๋ฐœ์ž ๋„๊ตฌ์—์„œ Redux๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์—ˆ๋‹ค. ๊ฐ•์‚ฌ๋‹˜ ์ฝ”๋“œ์™€ ๋‹ค๋ฅด๊ฒŒ ์ž‘์„ฑํ•œ๊ฒŒ ์—†๋Š”๋ฐ...๋ฌด์Šจ ์ฐจ์ด์ผ๊นŒ ๊ณ ๋ฏผํ•ด๋ณด์•˜๋Š”๋ฐ ์ผ๋‹จ extension ์„ค์น˜๋ถ€ํ„ฐ ๋˜์–ด์žˆ์ง€ ์•Š์•˜๋‹ค. ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์„ ์„ค์น˜ ํ•œ ํ›„, ๋‹ค๋ฅธ ๋ธ”๋กœ๊ทธ ๊ธ€์—์„œ ๋ณธ ์˜ˆ์ œ๋Œ€๋กœ store ์ƒ์„ฑ ์ฝ”๋“œ์—์„œ composeWithDevtools๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ์—ˆ๋‹ค.

 

์‹œ๋„ํ•œ ์ฝ”๋“œ:

const store = configureStore({
  reducer,
  composeWithDevtools,
})

์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์˜ˆ์ œ์—์„œ๋Š” createStore์„ ์‚ฌ์šฉํ•˜๋ฉฐ composeWithDevTools๋ฅผ importํ•ด ์ ์šฉํ•˜๊ณ  ์žˆ์—ˆ๊ณ , ๋‚˜๋Š” Redux Toolkit์˜ configureStore๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด, configureStore์—์„œ๋„ ๋น„์Šทํ•˜๊ฒŒ ์˜ต์…˜์œผ๋กœ ๋„˜๊ธฐ๋ฉด ๋˜๊ฒ ๊ตฌ๋‚˜, ๋ผ๋Š” ์ถ”์ธก์„ ํ•˜์˜€๊ณ , configureStore์˜ ์ธ์ž๋กœ composeWithDevtools๋ฅผ ๋„˜๊ฒจ์ฃผ์—ˆ๋‹ค.

๊ฒฐ๊ณผ๋Š”, Typescript ์—๋Ÿฌ

 

์›์ธ: configureStore์€ Devtools๋ฅผ ์ด๋ฏธ ํฌํ•จํ•œ๋‹ค.

Redux Toolkit์€ Redux๋ฅผ ์“ฐ๊ธฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ค์—ˆ๋˜ ์„ค์ •์„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ํ•ด๊ฒฐํ•˜์ž๋Š” ์ฒ ํ•™์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ configureStore์—๋Š” ๋‹ค์Œ ๊ธฐ๋Šฅ๋“ค์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‚ด์žฅ๋˜์–ด ์žˆ๋‹ค.

  • Redux DevTools ์—ฐ๋™
  • thunk middleware ํฌํ•จ
  • ๊ฐœ๋ฐœ/ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ

์ฆ‰, 

const store = configureStore({
  reducer,
})

 

 

์ด ํ•œ ์ค„๋งŒ์œผ๋กœ๋„ Redux DevTools ์—ฐ๊ฒฐ๊ณผ middleware ์„ค์ •์ด ๋ชจ๋‘ ์ž๋™์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค. ๋”ฐ๋ผ์„œ composeWithDevTools๋ฅผ ์‚ฌ์šฉํ•  ์ด์œ ๋„ ์—†๊ณ , ์• ์ดˆ์— configureStore์˜ ์˜ต์…˜์œผ๋กœ ์กด์žฌํ•˜์ง€๋„ ์•Š๋Š”๋‹ค.

 

configureStore๊ฐ€ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์ฃผ์š” ์˜ต์…˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. 

  • reducer
  • middleware
  • devTools
  • preloadedState
  • enhancers

configureStore์„ ์“ด๋‹ค๋ฉด, devtools ์‚ฌ์šฉ์„ ์œ„ํ•ด ๋ณ„๋„๋กœ ์„ค์ •์„ ํ•  ํ•„์š”๊ฐ€ ์—†์ง€๋งŒ, ๊ทธ๋ž˜๋„ ์ง์ ‘ ์ œ์–ดํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด compose๊ฐ€ ์•„๋‹Œ, ์•„๋ž˜์™€ ๊ฐ™์ด ์˜ต์…˜์œผ๋กœ ์กฐ์ ˆํ•ด์•ผ ํ•œ๋‹ค.

const store = configureStore({
  reducer,
  devTools: {
    trace: true,
    name: 'My App Store',
  },
})

 

๐Ÿ“ŒBoardlist ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„๊ณผ FC ํƒ€์ž…

์•„๋ž˜๋Š” BoardList ์ปดํฌ๋„ŒํŠธ์˜ ์ผ๋ถ€์ด๋‹ค.

type TBoardListProps = {
  activeBoardId: string;
  setActiveBoardId: React.Dispatch<React.SetStateAction<string>>;
}

const BoardList: FC<TBoardListProps> = ({
  activeBoardId,
  setActiveBoardId
}) => {
  const board = useTypedSelector(state => state.boards.boardArray);
  const [isFormOpen, setIsFormOpen] = useState(false);
}

 

์ด ์ปดํฌ๋„ŒํŠธ๋Š” ๋ถ€๋ชจ๋กœ๋ถ€ํ„ฐ

  • ํ˜„์žฌ ํ™œ์„ฑํ™”๋œ ๋ณด๋“œ ID(activeBoardId)
  • ํ•ด๋‹น ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋Š” ํ•จ์ˆ˜(setActiveBoardId)

๋ฅผ props๋กœ ์ „๋‹ฌ๋ฐ›๋Š” ๊ตฌ์กฐ์ด๋‹ค. 

 

์—ฌ๊ธฐ์„œ ๋ˆˆ์— ๋„๋Š” ์ ์€ ์ปดํฌ๋„ŒํŠธ ํƒ€์ž…์œผ๋กœ FC๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

FC๋ž€?

type FC<P = {}> = React.FunctionComponent<P>

 

 

FC๋Š” props ํƒ€์ž…์ด P์ธ React ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. 

const BoardList: FC<TBoardListProps>

 

์ฆ‰, ์ด ์ฝ”๋“œ์˜ ๋œป์€

'BoardList๋Š” React ์ปดํฌ๋„ŒํŠธ์ด๋ฉฐ, TBoardListProps ํƒ€์ž…์˜ props๋ฅผ ๋ฐ›๋Š”๋‹ค' ๋ผ๋Š” ์˜๋ฏธ๋กœ ํƒ€์ž…์„ ๋ช…์‹œํ•œ ๊ฒƒ์ด๋‹ค.

 

const BoardList = ({
  activeBoardId,
  setActiveBoardId
}: TBoardListProps) => {
  ...
}

์ด ์ฝ”๋“œ๋ž‘ ๋™์ž‘์ƒ ์™„์ „ํžˆ ๋™์ผํ•˜๊ธฐ๋Š” ํ•˜๋‹ค. 

 

๋‹ค๋งŒ FC๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด "์ด ํ•จ์ˆ˜๋Š” ์ปดํฌ๋„ŒํŠธ๋‹ค"๋ผ๋Š” ์˜๋„๋ฅผ ํƒ€์ž… ์ฐจ์›์—์„œ ํ•œ ๋ฒˆ ๋” ๊ฐ•์กฐํ•˜๋Š” ํšจ๊ณผ๊ฐ€ ์žˆ๊ธดํ•˜๋‹ค. ์ตœ๊ทผ์—๋Š” FC ์‚ฌ์šฉ์„ ์ง€์–‘ํ•˜๋Š” ๊ฒฝ์šฐ๋„ ๋งŽ๋‹ค๊ณ  ํ•˜๊ณ , ๊ฐ•์˜ ์˜์ƒ์ด ๋‹ค์†Œ ์˜ค๋ž˜๋œ ํŽธ์ด๋ผ ์˜ˆ์ „ ๊ด€ํ–‰์ด ๋ฐ˜์˜๋œ ํŒจํ„ด์œผ๋กœ ๋ณด์ด๊ธฐ๋„ ํ•˜๋‹ค...

๐Ÿ“ŒReact.Dispatch<React.SetStateAction<string>>

SetStateAction<T>์˜ ์ •์˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

type SetStateAction<T> = T | ((prevState: T) => T)

์ฆ‰ setState๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์„ ๋ชจ๋‘ ํ—ˆ์šฉํ•œ๋‹ค.

setActiveBoardId("board-1")          // ์ง์ ‘ ๊ฐ’ ์ „๋‹ฌ
setActiveBoardId(prev => prev + "1") // ์ด์ „ ๊ฐ’ ๊ธฐ๋ฐ˜ ์—…๋ฐ์ดํŠธ

์ด๋ฅผ ๊ฐ์‹ธ๋Š” Dispatch<A>๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํƒ€์ž…์ด๋‹ค.

type Dispatch<A> = (value: A) => void

์–ด๋–ค ๊ฐ’์„ ๋ฐ›์•„์„œ ์ƒํƒœ ์—…๋ฐ์ดํŠธ๋ฅผ ๋ฐœํ–‰(dispatch)ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. ๊ฒฐ๊ตญ ๋‘ ํƒ€์ž…์„ ํ•ฉ์น˜๋ฉด,

string ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” setStateํ•จ์ˆ˜

๋ฅผ ์˜๋ฏธํ•˜๊ฒŒ ๋œ๋‹ค.


Redux toolkit์ด ์™œ ์ด๋Ÿฐ api๋ฅผ ์ œ๊ณตํ•˜๋Š”์ง€, ์ƒํƒœ๊ด€๋ฆฌ์—์„œ์˜ typescript ์ ์šฉ์„ ์กฐ๊ธˆ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์ด์ „๊นŒ์ง€ ์ž˜ ์•Œ์ง€๋ชปํ–ˆ๋˜ ์ƒˆ๋กœ์šด ํƒ€์ž… ํ™œ์šฉ์„ ๋ฐฐ์šฐ๋ฉด์„œ ์•ˆ์ •์ ์ด๊ณ  ๋ช…์‹œ์ ์ธ ํƒ€์ž… ์ •์˜๋ผ๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์˜ ์ฒ ํ•™์„ ๋‹ค์‹œ ํ•œ๋ฒˆ ๋А๋‚„ ์ˆ˜ ์žˆ๋Š” ๊ณ„๊ธฐ๊ฐ€ ๋˜๊ธฐ๋„ ํ•œ ๋“ฏ. ๊ทธ์น˜๋งŒ ํƒ€์ž… ์–ด๋ ค์›Œ

 

'๐Ÿ•Š๏ธํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฐ๋ธŒ์ฝ”์Šค > TIL' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[๋ฐ๋ธŒ์ฝ”์Šค] book store 3  (0) 2025.06.24
[๋ฐ๋ธŒ์ฝ”์Šค] book store 2  (0) 2025.06.23
[๋ฐ๋ธŒ์ฝ”์Šค] React-Task-App: Redux์™€ ํƒ€์ž… ์•ˆ์ •์„ฑ  (0) 2025.06.17
[๋ฐ๋ธŒ์ฝ”์Šค] Redux  (2) 2025.06.16
[๋ฐ๋ธŒ์ฝ”์Šค] React ๊ธฐ์ดˆ ํ•ต์‹ฌ ์ •๋ฆฌ(state, ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น, ์ปดํฌ๋„ŒํŠธ ๋ฐ˜๋ณต)  (2) 2025.06.15
'๐Ÿ•Š๏ธํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฐ๋ธŒ์ฝ”์Šค/TIL' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [๋ฐ๋ธŒ์ฝ”์Šค] book store 3
  • [๋ฐ๋ธŒ์ฝ”์Šค] book store 2
  • [๋ฐ๋ธŒ์ฝ”์Šค] React-Task-App: Redux์™€ ํƒ€์ž… ์•ˆ์ •์„ฑ
  • [๋ฐ๋ธŒ์ฝ”์Šค] Redux
ํ‚ํ‚์ž‰
ํ‚ํ‚์ž‰
  • ํ‚ํ‚์ž‰
    monicx.dev
    ํ‚ํ‚์ž‰
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (181)
      • ๐Ÿ–ฅ๏ธdevelop (15)
        • Github (2)
        • Frontend (4)
        • Backend (5)
        • Mobile (0)
        • CS (0)
        • Three.js (0)
        • Docker (2)
      • ๐Ÿ“šbook (9)
        • npm Deep Dive (4)
      • ๐Ÿ“•review (39)
        • ์ฑ… (27)
        • ํ–‰์‚ฌ (1)
        • ํšŒ๊ณ  (2)
      • โญproject (5)
        • petiary (2)
        • ๆšŽ่ฉ  (0)
        • ์ธํ„ด (2)
      • ๐Ÿ˜ถ‍๐ŸŒซ๏ธalgorithm (0)
      • ๐Ÿ’กtips (2)
      • ๐Ÿ˜Ždaily (10)
      • ๐Ÿ•น๏ธgame (0)
      • ๐Ÿ•Š๏ธํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฐ๋ธŒ์ฝ”์Šค (87)
        • TIL (62)
        • ํ”„๋กœ์ ํŠธ (17)
        • ํšŒ๊ณ  (8)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
  • ๋งํฌ

    • ๋ฒจ๋กœ๊ทธ
  • ์ธ๊ธฐ ๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
ํ‚ํ‚์ž‰
[๋ฐ๋ธŒ์ฝ”์Šค] React-Task-App: configureStore ์‹ฌ์ธต ๋ถ„์„ ๋ฐ ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ ๊ณผ์ •์—์„œ์˜ ํƒ€์ž… ํ™œ์šฉ ์ •๋ฆฌ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”