[React] Redux κ°œλ…

강은비·2022λ…„ 1μ›” 19일
0

React

λͺ©λ‘ 보기
22/36
post-custom-banner

react μŠ€ν„°λ””μ—μ„œ λ¦¬μ•‘νŠΈλ₯Ό λ‹€λ£¨λŠ” κΈ°μˆ μ΄λΌλŠ” 책을 μ„ μ •ν–ˆκ³  이 책을 읽고 배운 것을 λ°”νƒ•μœΌλ‘œ μž‘μ„±λ˜μ—ˆλ‹€.


πŸ“Œ Reduxλž€?

  • κ°€μž₯ 많이 μ‚¬μš©ν•˜λŠ” λ¦¬μ•‘νŠΈ μƒνƒœ 관리 λΌμ΄λΈŒλŸ¬λ¦¬μ΄λ‹€.
  • μ»΄ν¬λ„ŒνŠΈμ˜ μƒνƒœ μ—…λ°μ΄νŠΈ λ‘œμ§μ„ λ‹€λ₯Έ 파일둜 λΆ„λ¦¬μ‹œμΌœμ„œ λ”μš± 효율적으둜 관리할 수 μžˆλ‹€.
  • μ»΄ν¬λ„ŒνŠΈλΌλ¦¬ μƒνƒœλ₯Ό κ³΅μœ ν•΄μ•Ό ν•  λ•Œλ„ μ—¬λŸ¬ μ»΄ν¬λ„ŒνŠΈλ₯Ό κ±°μΉ˜μ§€ μ•Šκ³  μ‰½κ²Œ μƒνƒœκ°’μ„ μ „λ‹¬ν•˜κ±°λ‚˜ μ—…λ°μ΄νŠΈν•  수 μžˆλ‹€.
  • μ΄λ•Œ reduxλŠ” λ¦¬μ•‘νŠΈμ— μ’…μ†λ˜λŠ” λΌμ΄λΈŒλŸ¬λ¦¬κ°€ μ•„λ‹ˆκ³  λ‹€λ₯Έ λΌμ΄λΈŒλŸ¬λ¦¬μ™€ ν”„λ ˆμž„μ›Œν¬, 바닐라 μžλ°”μŠ€ν¬λ¦½νŠΈμ™€ ν•¨κ»˜ μ‚¬μš©ν•  수 μžˆλ‹€.

πŸ“Œ Redux κ°œλ…

✨ μ•‘μ…˜

action

  • μƒνƒœλ₯Ό μ—…λ°μ΄νŠΈν•˜λŠ”λ° ν•„μš”ν•œ 정보λ₯Ό 담은 객체이닀.
  • μ•‘μ…˜ κ°μ²΄λŠ” λ°˜λ“œμ‹œ type ν”„λ‘œνΌν‹°λ₯Ό κ°€μ Έμ•Ό ν•˜λŠ”λ° 이 값을 μ•‘μ…˜μ˜ 이름이라고 μƒκ°ν•˜λ©΄ λœλ‹€.
  • μ•‘μ…˜ 이름은 κ³ μœ ν•΄μ•Ό ν•œλ‹€!

✨ μ•‘μ…˜ 생성 ν•¨μˆ˜

  • μ•‘μ…˜ 객체λ₯Ό λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜μ΄λ‹€.
  • 맀번 μ•‘μ…˜ 객체λ₯Ό 직접 μž‘μ„±ν•˜κΈ° 번거둜울 수 있고, μ‹€μˆ˜λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄ μ•‘μ…˜ 객체λ₯Ό ν•¨μˆ˜λ‘œ κ΄€λ¦¬ν•œλ‹€.

✨ λ¦¬λ“€μ„œ

  • μƒνƒœλ₯Ό μ—…λ°μ΄νŠΈν•˜λŠ” ν•¨μˆ˜μ΄λ‹€.
  • ν˜„μž¬ μƒνƒœμ™€ μ•‘μ…˜ 객체λ₯Ό 인자둜 λ°›μ•„ μƒˆλ‘œμš΄ μƒνƒœλ₯Ό λ°˜ν™˜ν•œλ‹€.
  • μ΄λ•Œ ν˜„μž¬ μƒνƒœλ₯Ό λ°›λŠ” 첫 번째 μΈμžμ— 초기 μƒνƒœλ₯Ό κΈ°λ³Έ 인자둜 μ„€μ •ν•œλ‹€.
    • stateκ°€ undefined일 λ•Œ 초기 μƒνƒœκ°’μ΄ μ‚¬μš©λœλ‹€.
  • 인자둜 받은 ν˜„μž¬ μƒνƒœμ˜ λΆˆλ³€μ„±μ„ μœ μ§€ν•˜λ©΄μ„œ μ—…λ°μ΄νŠΈλœ μƒˆλ‘œμš΄ μƒνƒœλ₯Ό λ°˜ν™˜ν•΄μ•Ό ν•œλ‹€.

✨ μŠ€ν† μ–΄

  • ν”„λ‘œμ νŠΈμ— λ¦¬λ•μŠ€λ₯Ό μ μš©ν•˜κΈ° μœ„ν•΄ storeλ₯Ό 생성해야 ν•œλ‹€.
  • createStore ν•¨μˆ˜μ˜ 인자둜 root reducerλ₯Ό λ„£μ–΄ ν˜ΈμΆœν•œλ‹€.
  • μŠ€ν† μ–΄μ—λŠ” μƒνƒœμ™€ λ¦¬λ“€μ„œκ°€ 있으며 μ—¬λŸ¬ λ‚΄μž₯ν•¨μˆ˜λ„ μžˆλ‹€.
import { createStore } from "redux";
const store = createStore(reducer);
// store.getState(); -> μƒνƒœ μ ‘κ·Ό
// store.dispatch(μ•‘μ…˜μƒμ„±ν•¨μˆ˜); -> μƒνƒœ μ—…λ°μ΄νŠΈ
// store.subscribe(λ¦¬μŠ€λ„ˆ ν•¨μˆ˜); -> λ¦¬μŠ€λ„ˆ 등둝

✨ λ””μŠ€νŒ¨μΉ˜

  • dispatchλŠ” μŠ€ν† μ–΄ λ‚΄μž₯ ν•¨μˆ˜ 쀑 ν•˜λ‚˜λ‘œ μ•‘μ…˜μ„ dispatchν•˜λŠ” ν•¨μˆ˜μ΄λ‹€.
  • μ•‘μ…˜ 객체λ₯Ό 인자둜 λ°›μ•„ 이λ₯Ό λ¦¬λ“€μ„œ ν•¨μˆ˜λ‘œ μ „λ‹¬ν•˜μ—¬ μ‹€ν–‰ν•˜λŠ” ν•¨μˆ˜μ΄λ‹€.

✨ ꡬ독

  • subscribe도 μŠ€ν† μ–΄ λ‚΄μž₯ ν•¨μˆ˜ 쀑 ν•˜λ‚˜μ΄λ‹€.
  • λ¦¬μŠ€λ„ˆ 콜백 ν•¨μˆ˜λ₯Ό 인자둜 λ°›μ•„ ν˜ΈμΆœν•˜λ©΄, μ•‘μ…˜μ΄ dispatchλ˜μ–΄ μƒνƒœκ°€ μ—…λ°μ΄νŠΈλ  λ•Œλ§ˆλ‹€ λ¦¬μŠ€λ„ˆ ν•¨μˆ˜κ°€ ν˜ΈμΆœλœλ‹€.

πŸ’‘ μ£Όμ˜ν•΄μ•Ό ν•  점

βœ” 단일 μŠ€ν† μ–΄

  • ν•˜λ‚˜μ˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—λŠ” ν•˜λ‚˜μ˜ μŠ€ν† μ–΄λ§Œ μš΄μ˜ν•˜λŠ” 것을 지ν–₯ν•œλ‹€.

βœ” 읽기 μ „μš© μƒνƒœ

βœ” λ¦¬λ“€μ„œλŠ” μˆœμˆ˜ν•œ ν•¨μˆ˜

  • λ¦¬λ“€μ„œ ν•¨μˆ˜λŠ” ν˜„μž¬ μƒνƒœ(state)와 μ•‘μ…˜ 객체(action)λ₯Ό 인자둜 λ°›λŠ”λ‹€.
  • νŒŒλΌλ―Έν„° μ™Έμ˜ κ°’μ—λŠ” μ˜μ‘΄ν•΄μ„  μ•ˆλœλ‹€.
  • 인자둜 받은 μƒνƒœλŠ” κ±΄λ“œλ¦¬μ§€ μ•Šκ³ , λ³€ν™”λ₯Ό μ€€ μƒˆλ‘œμš΄ μƒνƒœλ₯Ό λ°˜ν™˜ν•œλ‹€.
  • λ˜‘κ°™μ€ 인자둜 호좜되면 항상 λ˜‘κ°™μ€ κ²°κ³Ό 값을 λ°˜ν™˜ν•΄μ•Ό ν•œλ‹€.
post-custom-banner

0개의 λŒ“κΈ€