ν‹°μŠ€ν† λ¦¬ λ·°

https://ko.redux.js.org/

 

λ¦¬λ•μŠ€λž€?

μžλ°”μŠ€ν¬λ¦½νŠΈ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μƒνƒœλ₯Ό 효율적으둜 관리할 수 있게 λ„μ™€μ£ΌλŠ” 도ꡬ

 

 

 

λ¦¬μ•‘νŠΈ μƒνƒœ κ΄€λ¦¬λž€?

λΆ€λͺ¨ μ»΄ν¬λ„ŒνŠΈ(stateful)μ—μ„œ μƒνƒœλ₯Ό μ „λ‹¬λ°›λŠ” μžμ‹ μ»΄ν¬λ„ŒνŠΈ(stateless)의 λͺ¨μŠ΅

  • λ¦¬μ•‘νŠΈμ˜ 데이터 흐름은 단방ν–₯
  • μžμ‹μ€ λΆ€λͺ¨μ˜ μƒνƒœλ₯Ό props둜 μ „λ‹¬λ°›μŒ
  • λΆ€λͺ¨μ˜ μƒνƒœκ°’μ΄ λ³€ν•˜λ©΄, μžμ‹μ€ λ³€ν™”λœ μƒνƒœμ— 맞게 data ν˜Ήμ€ UIλ₯Ό λ³€κ²½ == λ¦¬λ Œλ”λ§
    • -> λΆ€λͺ¨λ„ λ¦¬λ Œλ”λ§, μžμ‹λ„ λ¦¬λ Œλ”λ§
  • 즉, μš°λ¦¬λŠ” μƒνƒœ 관리에 μžˆμ–΄μ„œ μƒνƒœ κ΅¬μ„±μš”μ†Œλ₯Ό μ΅œμ†Œν™”ν•˜κΈ° μœ„ν•΄ λ…Έλ ₯ν•΄μ•Ό 함.

 

 

TIP!- λ¦¬λžœλ”λ§ 상황

1. μžμ‹ μ˜ stateκ°’ λ³€κ²½

2. λΆ€λͺ¨ μ»΄ν¬λ„ŒνŠΈμ˜ λ¦¬λ Œλ”λ§

3. μžμ‹ μ΄ 전달받은 propsκ°’ λ³€κ²½

4. κ°•μ œ μ—…λ°μ΄νŠΈ(forceUpdate) 싀행될 λ•Œ

 

 

 

 

λ¦¬λ•μŠ€ μ™œ μ¨μ•Όν•˜λ‚˜?

λ¦¬μ•‘νŠΈλ‘œ λ§Œλ“  SPAλŠ” data ν˜Ήμ€ UI의 λ³€ν™”κ°€ 볡작, λ‹€μ–‘ν•΄μ§€λŠ” κ²½μš°κ°€ 많음 -> μ–΄λ–»κ²Œ 효율적으둜 관리?

λ¦¬λ•μŠ€λ₯Ό μ΄μš©ν•˜μ—¬ λ³΅μž‘ν•œ μƒνƒœκ΄€λ¦¬λ₯Ό 효율적으둜 ~

 

μ˜ˆμ‹œ) μ•„λž˜μ™€ 같은 λ ˆμ΄μ•„μ›ƒμ„ λ‹€μ΄μ–΄κ·Έλž¨ ν˜•νƒœλ‘œ λ°”κΏˆ

λ ˆμ΄μ•„μ›ƒ

⬇

 

λ‹€μ΄μ–΄κ·Έλž¨

 

λΆ€λͺ¨ μ»΄ν¬λ„ŒνŠΈμ˜ stateλ₯Ό 받을 μžμ‹ μ»΄ν¬λ„ŒνŠΈλ“€μ˜ κΉŠμ΄κ°€ 1측밖에 λ˜μ§€ μ•Šμ•„, μΆ©λΆ„νžˆ μ‰½κ²Œ μƒνƒœλ₯Ό μ „λ‹¬ν•˜κ³  관리 κ°€λŠ₯

 

ν•˜

지

만

 

μ•„λž˜μ™€ 같이 μžμ‹  μ»΄ν¬λ„ŒνŠΈμ˜ κΉŠμ΄κ°€ κΉŠμ–΄μ§„λ‹€λ©΄?

μ•„λž˜λŠ” λ ˆμ΄μ•„μ›ƒ -> λ‹€μ΄μ–΄κ·Έλž¨ ν˜•νƒœλ‘œ λ³€ν™˜ν•œ 그림이닀.

 

λ ˆμ΄μ•„μ›ƒ

⬇

λ‹€μ΄μ–΄κ·Έλž¨

 

1) 상황1 - λΆ€λͺ¨ μ»΄ν¬λ„ŒνŠΈμ—μ„œ μ΅œν•˜μœ„ μžμ‹ μ»΄ν¬λ„ŒνŠΈκΉŒμ§€ μƒνƒœλ₯Ό μ „λ‹¬ν•΄μ£Όμ–΄μ•Όν•˜λŠ” 경우

λΆ€λͺ¨-μžμ‹-μžμ‹-μ΅œν•˜μœ„ μžμ‹ 경둜λ₯Ό 톡해 μƒνƒœ 전달

λΆ€λͺ¨-μžμ‹-μžμ‹-μ΅œν•˜μœ„ μžμ‹ 경둜λ₯Ό 톡해 μƒνƒœ 전달

단점 : λΆ€λͺ¨~μ΅œν•˜μœ„ μžμ‹ 사이에 μžˆλŠ” μžμ‹ μ»΄ν¬λ„ŒνŠΈλ“€κ³ΌλŠ” λ¬΄κ΄€ν•œ μƒνƒœλ³€ν™”μ΄λ”λΌλ„, 무쑰건 거쳐가야함

λΆ€λͺ¨-μžμ‹ 관계 μ»΄ν¬λ„ŒνŠΈμ˜ κΉŠμ΄κ°€ 더 κΉŠμ–΄μ§„λ‹€λ©΄ μƒνƒœκ΄€λ¦¬ ꡉμž₯히 κΉŒλ‹€λ‘œμ›Œμ§

 

 

2) 상황2 - μžμ‹ μ»΄ν¬λ„ŒνŠΈμ—μ„œ λ°œμƒν•œ μ΄λ²€νŠΈμ— μ˜ν•΄ λ‹€λ₯Έ λ£¨νŠΈμ— μžˆλŠ” μ»΄ν¬λ„ŒνŠΈμ˜ μƒνƒœλ³€ν™”λ₯Ό λΆˆλŸ¬μΌμœΌμΌœμ•Όν•˜λŠ” μƒνƒœμ— λŒ€ν•œ 관리도 κΉŒλ‹€λ‘­λ‹€.

 

 

 

λ¦¬λ•μŠ€λŠ” 이런 상황을 μ–΄λ–»κ²Œ ν•΄κ²°?

λ‹€μ‹œ λ§ν•˜μ§€λ§Œ, λ¦¬λ•μŠ€λŠ” μƒνƒœκ΄€λ¦¬λ₯Ό 효율적으둜 ν•  수 μžˆλ„λ‘ λ„μ™€μ£ΌλŠ” 도ꡬ

 

λ¦¬λ•μŠ€μ˜ 효율적인 μƒνƒœκ΄€λ¦¬

 

μœ„μ™€ 같이 μŠ€ν† μ–΄λ₯Ό μ‚¬μš©ν•˜μ—¬, μƒνƒœλ₯Ό μ»΄ν¬λ„ŒνŠΈ ꡬ쑰 λ°”κΉ₯에 두고, μŠ€ν† μ–΄λΌλŠ” μ€‘κ°„μžλ₯Ό 톡해 μƒνƒœλ₯Ό μ—…λ°μ΄νŠΈν•˜κ±°λ‚˜, μƒˆλ‘œμš΄ μƒνƒœλ₯Ό μ „λ‹¬λ°›λŠ”λ‹€!

 

즉, λ¦¬λ•μŠ€λ₯Ό μ‚¬μš©μ‹œ, μœ„μ™€ 같이 μƒνƒœκ°’μ„ μ»΄ν¬λ„ŒνŠΈμ— μ’…μ†μ‹œν‚€μ§€ μ•Šκ³ , μƒνƒœκ΄€λ¦¬λŠ” λ°”κΉ₯μ—μ„œ ν•  수 μžˆλ‹€!

 

 

 

 

 

κ·Έλ ‡λ‹€λ©΄, μŠ€ν† μ–΄μ˜ μƒνƒœλ³€ν™”μ˜ ν•„μš”λ₯Ό μ–΄λ–»κ²Œ μΊμΉ˜ν•˜κ³ , μ–΄λ–»κ²Œ μƒˆλ‘œμš΄ μƒνƒœλ₯Ό μ „λ‹¬ν•˜λŠ”κ°€?

λ¦¬λ•μŠ€μ˜ μ „λ°˜μ  흐름

λ¦¬λ•μŠ€μ˜ μ „λ°˜μ μΈ 흐름

λ¦¬λ•μŠ€ κ°œλ…

βœ” Action

μƒνƒœ λ³€ν™”κ°€ ν•„μš”ν•  λ•Œ, μ•‘μ…˜μ„ λ°œμƒμ‹œν‚΄

  • ν•˜λ‚˜μ˜ 객체둜 ν‘œν˜„λ¨
  • 예λ₯Ό λ“€μ–΄, 할일 λͺ©λ‘ μΆ”κ°€, μ‚­μ œμ— λŒ€ν•œ μ•‘μ…˜μ˜ νƒ€μž… μ •μ˜κ°€ μžˆμ–΄μ•Όν•¨
  • μ•‘μ…˜μ€ typeμ΄λΌλŠ” ν•„λ“œλ₯Ό ν•„μˆ˜μ μœΌλ‘œ 가지고 μžˆμ–΄μ•Όν•¨
  • μΆ”κ°€μ μœΌλ‘œ ν•„μš”ν•œ 객체 μš”μ†Œλ“€μ€ ν•„μš”μ— μ˜ν•΄ 좔가됨
  • μ•„λž˜μ˜ data ν•„λ“œμ™€ κ°™λ‹€.
{
  type: "ADD_TODO",
  data: {
    id: 0,
    text: "redux"
  }
}

 

βœ” Action Creator

  • μ•‘μ…˜ μƒμ„±ν•¨μˆ˜ : μ•‘μ…˜μ„ λ§Œλ“œλŠ” ν•¨μˆ˜
  • νŒŒλΌλ―Έν„°λ₯Ό μž…λ ₯λ°›μ•„, μ•‘μ…˜μ„ 객체 ν˜•νƒœλ‘œ λ§Œλ“€μ–΄μ€Œ
  • μ•„λž˜μ˜ ν•¨μˆ˜λŠ” dataλΌλŠ” νŒŒλΌλ―Έν„°λ₯Ό μž…λ ₯λ°›μ•„, μ•‘μ…˜μ„ 객체 ν˜•νƒœλ‘œ λ°˜ν™˜ν•˜λŠ” μ—­ν• 
function addTodo(data) {
  return {
    type: "ADD_TODO",
    data
  };
}

 

βœ” Reducers

  • λ³€ν™”λ₯Ό μΌμœΌν‚€λŠ” ν•¨μˆ˜
  • νŒŒλΌλ―Έν„° μž…λ ₯ : (μ΄μ „μƒνƒœ, μ•‘μ…˜)
  • λ°˜ν™˜κ°’ : λ‘œμ§μ— μ˜ν•΄ λ³€ν™”λœ μƒνƒœκ°’ λ°˜ν™˜
function reducer(state, action) {
  ...
  return alteredState;
}

 

βœ” Store

  • μ»΄ν¬λ„ŒνŠΈ 외뢀에 μžˆλŠ” μƒνƒœ μ €μž₯μ†Œ
  • μŠ€ν† μ–΄ λ‚΄λΆ€μ—λŠ” ν˜„μž¬ μƒνƒœλ“€, λ¦¬λ“€μ„œ, λͺ‡ 가지 λ‚΄μž₯ν•¨μˆ˜ 포함

 

βœ” Dispatch

  • μŠ€ν† μ–΄μ˜ λ‚΄μž₯ν•¨μˆ˜ 쀑 ν•˜λ‚˜
  • μ•‘μ…˜μ„ λ°œμƒμ‹œν‚€λŠ” μ—­ν• 
  • λ””μŠ€νŒ¨μΉ˜κ°€ μ•‘μ…˜μ„ λ°œμƒμ‹œμΌœ μŠ€ν† μ–΄μ—κ²Œ μƒνƒœ λ³€ν™”κ°€ ν•„μš”ν•˜λ‹€λŠ” 것을 μ•Œλ¦Ό
  • 호좜된 μ•‘μ…˜μ€ λ¦¬λ“€μ„œ ν•¨μˆ˜λ₯Ό 호좜
  • μ•‘μ…˜μ— λ§žλŠ” λ‘œμ§λŒ€λ‘œ μƒνƒœλ₯Ό λ³€ν™”μ‹œν‚€λŠ” 과정을 κ±°μΉ¨

 

βœ” 정리 - λ¦¬λ•μŠ€μ˜ 흐름

  • μΆ”κ°€, μ‚­μ œμ™€ 같은 각각의 μ•‘μ…˜νƒ€μž… μ •μ˜
  • μ•‘μ…˜ ν•¨μˆ˜λŠ” 각각의 μ•‘μ…˜ typeκ³Ό νŒŒλΌλ―Έν„°λ₯Ό μž…λ ₯λ°›μ•„, μ•‘μ…˜μ„ 객체지ν–₯ ν˜•νƒœλ‘œ λ°˜ν™˜
  • μƒνƒœλ³€ν™”κ°€ ν•„μš”ν•΄μ§ˆ λ•Œ, λ””μŠ€νŒ¨μΉ˜κ°€ μ•‘μ…˜μ„ λ°œμƒμ‹œμΌœ μŠ€ν† μ–΄μ—κ²Œ μ•Œλ¦Ό
  • μŠ€ν† μ–΄λ‘œ μ „λ‹¬λœ μ•‘μ…˜μ€ μŠ€ν† μ–΄μ˜ λ¦¬λ“€μ„œ ν•¨μˆ˜ 호좜
  • 호좜된 λ¦¬λ“€μ„œ ν•¨μˆ˜λŠ” (μ΄μ „μƒνƒœ, μ•‘μ…˜νƒ€μž…)을 νŒŒλΌλ―Έν„°λ‘œ 전달받아,
    μ •μ˜λœ λ‘œμ§λŒ€λ‘œ ν˜„μž¬ μƒνƒœκ°’μ„ λ³€ν™”μ‹œμΌœ λ³€ν™”λœ μƒνƒœλ₯Ό λ°˜ν™˜
  • λ°˜ν™˜λœ μƒνƒœλŠ” μŠ€ν† μ–΄μ— μ €μž₯

 

λ¦¬λ•μŠ€μ˜ μ „λ°˜μ μΈ 흐름

 

 

이 λ³΅μž‘ν•œ 고정을 μ•ˆμ •μ μœΌλ‘œ κ΄€λ¦¬ν•˜λ €λ©΄, κ·œμΉ™μ΄ ν•„μš”ν•˜λ‹€!

λ¦¬λ•μŠ€λ₯Ό μ•ˆμ •μ μœΌλ‘œ ν™œμš©ν•˜κΈ° μœ„ν•΄ μ§€μΌœμ•Όν•  3가지 κ·œμΉ™

  • 단일 μŠ€ν† μ–΄ μ‚¬μš© ꢌμž₯
    • 1 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ - 1 μŠ€ν† μ–΄ μ‚¬μš© ꢌμž₯
    • μ•±μ˜ λͺ¨λ“  stateλŠ” ν•œ μž₯μ†Œμ— μ €μž₯. 즉, stateλ₯Ό κ°±μ‹ ν•˜λ €κ³  μ—¬κΈ°μ €κΈ° 찾아닀닐 ν•„μš” X
  • μƒνƒœλŠ” μ½κΈ°μ „μš©μœΌλ‘œ
    • μƒνƒœ λ³€κ²½μ‹œ, concatκ³Ό 같은 ν•¨μˆ˜λ₯Ό 톡해 μƒˆλ‘œμš΄ 값을 이어뢙여 μƒμ„±ν•œ μƒˆλ‘œμš΄ λ°°μ—΄λ‘œ κ΅μ²΄ν•˜μ—¬ μ—…λ°μ΄νŠΈ
    • λΆˆλ³€μ„± μœ μ§€
      • λΆˆλ³€μ„±μ΄ μœ μ§€λœ μ—…λ°μ΄νŠΈλŠ” λ¦¬λ•μŠ€μ˜ 변화감지방법인 shallow equality에 μ ν•©ν•œ μƒνƒœλ³€ν™”μ΄κΈ° λ•Œλ¬Έμ—
        이 μ—…λ°μ΄νŠΈ 방법 μ‚¬μš©!
    • μ•‘μ…˜μ„ ν†΅ν•΄μ„œλ§Œ λ³€κ²½ (데이터 λ³€κ²½ν•˜λŠ” 유일 방법이 μ•‘μ…˜! μ™œλƒν•˜λ©΄ λΆˆλ³€μ„± μœ μ§€ν•˜κΈ° μœ„ν•΄)
  • ReducerλŠ” μˆœμˆ˜ν•œ ν•¨μˆ˜
    • μˆœμˆ˜ν•œ ν•¨μˆ˜λž€ ?
      • λ™μΌν•œ μž…λ ₯을 λ°›μ•˜μ„ λ•Œ μ–Έμ œλ‚˜ λ™μΌν•œ 좜λ ₯을 λ‚΄λŠ” ν•¨μˆ˜
    • κ°€μ •) μš°λ¦¬κ°€ 클릭을 톡해 μ•‘μ…˜ λ°œμƒμ‹œν‚€λ©΄ -> 배경색 랜덀으둜 λ°”λ€ŒλŠ” 둜직 μž‘μ„±
      • ν•¨μˆ˜μ˜ 둜직 λ‚΄μ—μ„œ λžœλ€κ°’μ„ 생성해야함
      • λžœλ€κ°’ μƒμ„±μ΄λž€ ?
        • 맀번 좜λ ₯이 λ°”λ€œ == μˆœμˆ˜ν•˜μ§€ λͺ»ν•œ ν•¨μˆ˜
    • λ„€νŠΈμ›Œν¬ μš”μ²­ μž‘μ—… == μˆœμˆ˜ν•˜μ§€ λͺ»ν•œ 둜직
    • λ¦¬λ“€μ„œλ₯Ό μ΄μš©ν•΄μ„œλ§Œ λ§ˆμ§€λ§‰ stateκ°’ 지정 (stateλŠ” κ²°μ½” 직접 μˆ˜μ •, λ³€ν˜• X)

 

마무리

λ¦¬λ•μŠ€ 뿐만 μ•„λ‹ˆλΌ React Context API, MobX λ“± μƒνƒœ 관리λ₯Ό λ„μ™€μ£ΌλŠ” 도ꡬ듀이 λͺ‡κ°€μ§€ 더 μžˆμ§€λ§Œ,

λ¦¬μ•‘νŠΈμ˜ λ‹¨μ§μ²˜λŸΌ λ¦¬λ•μŠ€λŠ” κ°€μž₯ 많이 μ‚¬μš©ν•˜λŠ” μƒνƒœκ΄€λ¦¬ 도ꡬ.

λ¦¬μ•‘νŠΈλ₯Ό μ‚¬μš©ν•œλ‹€λ©΄ κΌ­ μ΅ν˜€μ•Ό ν•  도ꡬ!!

 

 

 

 

 

 

μ°Έκ³ μ‚¬μ΄νŠΈ

velog.io/@youthfulhps/What-is-Redux-and-why-use-it

 

λ¦¬λ•μŠ€λŠ” 무엇이고, μ™œ μ‚¬μš©ν•˜λŠ”κ°€?

πŸ”§ λ¦¬λ•μŠ€ λ¦¬λ•μŠ€λž€, μžλ°”μŠ€ν¬λ¦½νŠΈ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μƒνƒœλ₯Ό 효율적으둜 관리할 수 있게 λ„μ™€μ£ΌλŠ” λ„κ΅¬μž…λ‹ˆλ‹€. λ³΅μž‘ν•œ μƒνƒœκ΄€λ¦¬κ°€ μ΄λ£¨μ–΄μ§€λŠ” SPA(Single Page Application)μ—μ„œ 특히 μœ μš©ν•˜κ²Œ μ‚¬μš©λ©

velog.io

 

λŒ“κΈ€