Redux Toolkit - dltmdrbtjd/HANG GitHub Wiki

Redux-Toolkit

๋ชฉ์ 

  1. Redux ์ €์žฅ์†Œ ๊ตฌ์„ฑ์ด ๋„ˆ๋ฌด ๋ณต์žกํ•˜๋‹ค.
  2. Redux์—์„œ ์œ ์šฉํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ์œ„ํ•ด์„œ๋Š” ๋งŽ์€ ํŒจํ‚ค์ง€๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผํ•œ๋‹ค.
  3. Redux์—๋Š” ๋„ˆ๋ฌด ๋งŽ์€ ์‚ฌ์šฉ๊ตฌ ์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
  • ๋ชจ๋“  ๋ฌธ์ œ์ ๋“ค์„ ๋ชจ๋‘ ํ•ด๊ฒฐํ•  ์ˆ˜๋Š” ์—†์ง€๋งŒ ๊ธฐ์กด js๋กœ ์ž‘์—…์‹œ์—๋Š” redux-actions๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ž‘์—…ํ•˜์˜€์—ˆ๋Š”๋ฐ ๊ธฐ์กด๋ณด๋‹ค ์กฐ๊ธˆ ๋” ํŽธํ•ด์ง„ ์ •๋„์˜€์ง€ ์œ„์˜ ๋ฌธ์ œ์ ๋“ค์€ ๊ทธ๋Œ€๋กœ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ts๋กœ ๋ฆฌํŒฉํ† ๋ง์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋ฆฌ๋•์Šค๋ฅผ ์–ด๋–ป๊ฒŒํ•ด์•ผ ์ข€ ๋” ๊น”๋”ํ•˜๊ฒŒ ์‚ฌ์šฉํ• ์ง€ ๊ณ ๋ฏผํ•˜๋‹ค๊ฐ€ redux-toolkit์„ ๋ฐœ๊ฒฌํ•˜๊ณ  redux์ฝ”๋“œ๋ฅผ ๊ฐœ์„ ํ•˜๋Š”๋ฐ ๋งŽ์€ ๋„์›€์ด ๋˜์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ts์˜ ์ง€์›๋„ ๊ต‰์žฅํžˆ ์ž˜๋˜์–ด์žˆ์–ด์„œ ๋ฆฌํŒฉํ† ๋ง๊ณผ์ •์—์„œ ๊ต‰์žฅํžˆ ์œ ์šฉํ–ˆ๋‹ค.

๊ฐœ์„ ํ›„์˜ ์ฝ”๋“œ

  • ํ™”๋ฉด 2๊ฐœ์— ๊ฑธ์ณ ๊ธธ๊ฒŒ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ๋” ๊น”๋”ํ•˜๊ฒŒ ์ •๋ฆฌํ•˜์˜€๋‹ค.

๋ฆฌ๋•์Šค ๊ฐœ์„ ์ฝ”๋“œ

์„ค์น˜

npm install @reduxjs/toolkit

ํฌํ•จ๋œ api

  • configureStore(): createStore๋‹จ์ˆœํ™”๋œ ๊ตฌ์„ฑ ์˜ต์…˜๊ณผ ์ข‹์€ ๊ธฐ๋ณธ๊ฐ’์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ๋ž˜ํ•‘ ํ•ฉ๋‹ˆ๋‹ค. ์ž๋™์œผ๋กœ ์Šฌ๋ผ์ด์Šค ๋ฆฌ๋“€์„œ๋ฅผ ๊ฒฐํ•ฉํ•˜๊ณ , ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“  Redux ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์ถ”๊ฐ€ redux-thunkํ•˜๊ณ , ๊ธฐ๋ณธ์ ์œผ๋กœ ํฌํ•จ ํ•˜๊ณ , Redux DevTools Extension์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • createReducer(): switch ๋ฌธ์„ ์ž‘์„ฑํ•˜๋Š” ๋Œ€์‹  ๋Œ€์†Œ๋ฌธ์ž ๊ฐ์†Œ ํ•จ์ˆ˜์— ์ž‘์—… ์œ ํ˜•์˜ ์กฐํšŒ ํ…Œ์ด๋ธ”์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ immer๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฅผ ์ž๋™์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ state.todos[3].completed = true.
  • createAction(): ์ฃผ์–ด์ง„ ์•ก์…˜ ์œ ํ˜• ๋ฌธ์ž์—ด์— ๋Œ€ํ•œ ์•ก์…˜ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ•จ์ˆ˜ ์ž์ฒด๊ฐ€ toString()์ •์˜๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ํ˜•์‹ ์ƒ์ˆ˜ ๋Œ€์‹  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • createSlice(): ๋ฆฌ๋“€์„œ ํ•จ์ˆ˜์˜ ๊ฐ์ฒด, ์Šฌ๋ผ์ด์Šค ์ด๋ฆ„, ์ดˆ๊ธฐ ์ƒํƒœ ๊ฐ’์„ ๋ฐ›์•„ ํ•ด๋‹น ์•ก์…˜ ์ƒ์„ฑ์ž์™€ ์•ก์…˜ ์œ ํ˜•์„ ๊ฐ€์ง„ ์Šฌ๋ผ์ด์Šค ๋ฆฌ๋“€์„œ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • createAsyncThunk: ์ž‘์—… ์œ ํ˜• ๋ฌธ์ž์—ด๊ณผ ์•ฝ์†์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ˆ˜๋ฝํ•˜๊ณ  pending/fulfilled/rejectedํ•ด๋‹น ์•ฝ์†์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์—… ์œ ํ˜• ์„ ์ „๋‹ฌํ•˜๋Š” ์ฝํฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • createEntityAdapter: ์Šคํ† ์–ด์—์„œ ์ •๊ทœํ™”๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฆฌ๋“€์„œ ๋ฐ ์…€๋ ‰ํ„ฐ ์„ธํŠธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • createSelector์œ ํ‹ธ๋ฆฌํ‹ฐ ๋กœ๋ถ€ํ„ฐ ์žฌ ์„ ํƒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š”, ์‚ฌ์šฉ์˜ ์šฉ์ด์„ฑ์„ ์œ„ํ•ด ์žฌ์ˆ˜์ถœ.

store

  • ๋ฆฌํŒฉํ† ๋ง๊ณผ์ •์—์„œ reudx-toolkit์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ๋“ค๋กœ ์Šคํ† ์–ด๋ฅผ ๋‹ค์‹œ ์ƒ์„ฑํ•˜์˜€๋‹ค.
  • useSelector๋กœ ์ปดํฌ๋„ŒํŠธ์—์„œ state๋ฅผ ๊ฐ€์ ธ์˜ฌ๋•Œ ํ•ญ์ƒ ํƒ€์ž…์„ค์ •์„ ํ•ด์ค˜์•ผํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์ด ์žˆ์–ด์„œ store์— ์ปค์Šคํ…€์œผ๋กœ type๋„ ์ถ”๊ฐ€๋œ selector๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์‚ฌ์šฉํ•˜์˜€๋‹ค.

์Šคํ† ์–ด ๋ณ€๊ฒฝ์™„๋ฃŒ

์ถœ์ฒ˜

์ž๋ฃŒ : https://redux-toolkit.js.org/