[TIL] useSelector / useDispatch

ํ˜ฑยท2023๋…„ 11์›” 12์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
31/85
post-thumbnail

useSelector

๐Ÿ‘‰ ์šฐ๋ฆฌ๊ฐ€ ์‚ดํŽด๋ณผ ์ฒซ ๋ฒˆ์งธ React-Redux Hook์ธ useSelector ๋Š” React ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ Redux ์ €์žฅ์†Œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” Hook ์ด๋‹ค.

๐Ÿ‘‰ useSelector ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ selector ํ•จ์ˆ˜ ๋ผ๊ณ  ํ•˜๋Š” ๋‹จ์ผ ํ•จ์ˆ˜๋ฅผ ํ—ˆ์šฉํ•œ๋‹ค. selector๋Š” ์ „์ฒด Redux store state๋ฅผ ์ธ์ˆ˜๋กœ ์‚ฌ์šฉํ•˜๊ณ  state์—์„œ ์ผ๋ถ€ ๊ฐ’์„ ์ฝ๊ณ  ํ•ด๋‹น ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

const counter = useSelector((state) => state);
console.log(counter);

์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  counter๋ผ๋Š” reducer์˜ state๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
์ด๋ ‡๊ฒŒ useSelector์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ํ•จ์ˆ˜๊ฐ€ ๋“ค์–ด๊ฐ€๋Š”๋ฐ, ์ด ํ•จ์ˆ˜์˜ ์ธ์ž๋Š” ํ˜„์žฌ Redux store์— ์กด์žฌํ•˜๋Š” ๋ชจ๋“  reducer ์ธ ๊ฒƒ์ด๋‹ค.

counter๋ผ๋Š” reducer์— ์ ‘๊ทผํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•˜๋ฉด ๋œ๋‹ค.

const counter = useSelector((state) => state.counter); 

console.log(counter);

store.subscribe()๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ store์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ์— ์ด๋Ÿฌํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ทธ๋Ÿด ํ•„์š”๊ฐ€ ์—†๋‹ค.

๋‹คํ–‰ํžˆ๋„ useSeletor๋Š” ์ž๋™์œผ๋กœ redux store๋ฅผ subscribe ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด action์ด dispatch ๋  ๋•Œ๋งˆ๋‹ค selector ํ•จ์ˆ˜๊ฐ€ ๋‹ค์‹œ ํ˜ธ์ถœ๋œ๋‹ค.
selector์—์„œ ๋ฐ˜ํ™˜๋œ ๊ฐ’์ด ๋งˆ์ง€๋ง‰ ์‹คํ–‰๋˜์—ˆ์„ ๋•Œ์™€ ๋‹ฌ๋ผ์ง€๋ฉด useSelector ๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋กœ ๋ฆฌ๋ Œ๋”๋ง ํ•œ๋‹ค. ์ปดํฌ๋„ŒํŠธ์—์„œ ํ•œ ๋ฒˆ๋งŒ useSelector()๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋‚˜๋จธ์ง€ ์ž‘์—…์€ redux๊ฐ€ ์•Œ์•„์„œ ์ˆ˜ํ–‰ํ•œ๋‹ค.

useDispatch

๐Ÿ‘‰ dispatch : Action ๊ฐ์ฒด๋ฅผ reducer๋กœ ๋ณด๋‚ด๋Š” ์ „๋‹ฌ์ž ํ•จ์ˆ˜
๐Ÿ‘‰ dispath๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” useDispath()๋ผ๋Š” Hook์„ ์ด์šฉํ•œ๋‹ค.

Redux store์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ปดํฌ๋„ŒํŠธ๋กœ ์ฝ์–ด์˜ค๋Š” ๋ฐฉ๋ฒ•์€ useSelector()์ด๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์ปดํฌ๋„ŒํŠธ์—์„œ store๋กœ action์„ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ useDispatch()์ด๋‹ค!

๋”ฐ๋ผ์„œ action์„ dispatchํ•ด์•ผ ํ•˜๋Š” ๋ชจ๋“  ๊ตฌ์„ฑ์š”์†Œ์—์„œ const dispatch= useDispatch() ๋ฅผ ํ˜ธ์ถœํ•œ ํ›„ ํ•„์š”์— ๋”ฐ๋ผ dispatch(์ผ๋ถ€ ์•ก์…˜)๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

const dispatch = useDispatch();
...
dispatch({ type: "PLUS" });

[Redux์˜ ํ๋ฆ„]
1. View ์—์„œ ์•ก์…˜์ด ์ผ์–ด๋‚œ๋‹ค.
2. dispatch ์—์„œ action์ด ์ผ์–ด๋‚˜๊ฒŒ ๋œ๋‹ค.
3. action์— ์˜ํ•œ reducer ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „์— middleware๊ฐ€ ์ž‘๋™ํ•œ๋‹ค.
4. middleware ์—์„œ ๋ช…๋ น๋‚ด๋ฆฐ ์ผ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋‚œ๋’ค, reducer ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
5. reducer ์˜ ์‹คํ–‰๊ฒฐ๊ณผ store์— ์ƒˆ๋กœ์šด ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.
6. store์˜ state์— subscribe ํ•˜๊ณ  ์žˆ๋˜ UI์— ๋ณ€๊ฒฝ๋œ ๊ฐ’์„ ์ค€๋‹ค.


์ •๋ฆฌ

  • store :store๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๋Š” ๊ณต๊ฐ„์œผ๋กœย state ๋ฅผ ๋„ฃ๋Š”๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.ย createStore๋Š”ย reducer๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์š”๊ตฌํ•œ๋‹ค. ๊ฒฐ๊ณผ๊ฐ’์€ย getState()๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ์ถœ๋ ฅ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • reducer : reducer๋Š”ย state๋ฅผ ๋ณ€๊ฒฝ ์‹œํ‚ค๋Š” ํ•จ์ˆ˜๋กœ ์‚ฌ์šฉ์ž๊ฐ€dispatch๋ฅผ ํ†ตํ•ด ๋ณด๋‚ด๋Š” action ๊ฐ์ฒด๋ฅผ ํ†ตํ•ดย state๊ฐ’๋“ค์„ ๋ณ€๊ฒฝํ•œ๋‹ค. number, array, object๋“ฑ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ด๊ณณ์—์„œ๋งŒ ๋ณ€๊ฒฝํ•˜๋ฉฐ, ๋ณ€๊ฒฝํ•˜๋Š” ๊ฐ’์€ย action ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ๊ตฌ๋ถ„ํ•˜์—ฌ ์ฒ˜๋ฆฌํ•œ๋‹ค.ย reducer์˜ ์—ฐ์‚ฐ์ด ๋๋‚˜๊ณ  returnํ•˜๋Š” ๊ฐ’์ด ํ˜„์žฌ์˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ย state๊ฐ’์ด ๋˜๋ฉฐย store์— ๋“ฑ๋ก๋œ๋‹ค.
  • action : store์— ๋“ฑ๋กํ•˜๋Š”ย reducer๋ฅผ ์†Œํ†ตํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœย action์„ ์‚ฌ์šฉํ•œ๋‹ค.ย action์€ type์ด๋ผ๋Š” key๋ฅผ ํ•„์ˆ˜๋กœ ๊ฐ’๋Š” Objectํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋‹ค.ย action์€ ๊ทธ๋Ÿผย reducer์— ์–ด๋–ป๊ฒŒ ๋ณด๋‚ด์งˆ๊นŒ?ย dispatch๋ฉ”์†Œ๋“œ๋ฅผ ํ™œ์šฉํ•œ๋‹ค.ย dispatch๋Š”ย store์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋กœย reducer๋ฅผ ๋™์ž‘์‹œํ‚ค๊ฒŒ ๋งŒ๋“ ๋‹ค.
profile
๋Š๋ฆฌ๋”๋ผ๋„ ์กฐ๊ธˆ์”ฉ, ๊พธ์ค€ํžˆ

0๊ฐœ์˜ ๋Œ“๊ธ€