λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

πŸ“š/γ„΄ React

λ¦¬λ•μŠ€(Redux)에 λŒ€ν•΄ μ•Œμ•„λ³΄μž

λ¦¬λ•μŠ€(Redux)

μ»΄ν¬λ„ŒνŠΈλ“€μ˜ μƒνƒœ κ΄€λ ¨ λ‘œμ§λ“€μ„ λ‹€λ₯Έ νŒŒμΌλ“€λ‘œ λΆ„λ¦¬μ‹œμΌœ λ”μš± 효율적으둜 관리

κΈ€λ‘œλ²Œ μƒνƒœ 관리

=> Context API, useReducer와 μœ μ‚¬

 

λ¦¬λ•μŠ€λ₯Ό μ‚¬μš©ν•˜λŠ” 것과 Context APIλ₯Ό μ‚¬μš©ν•˜λŠ” κ²ƒμ˜ 차이

λ¦¬λ•μŠ€λŠ”,,,

  1. 미듀웨어
  2. μœ μš©ν•œ ν•¨μˆ˜(connect)와 Hooks(useSelector, useDispatch, useStore)
  3. ν•˜λ‚˜μ˜ μ»€λ‹€λž€ μƒνƒœ (λͺ¨λ“  κΈ€λ‘œλ²Œ μƒνƒœλ₯Ό ν•˜λ‚˜μ˜ μ»€λ‹€λž€ μƒνƒœ 객체에 λ„£μ–΄ μ‚¬μš©)

concat: λ¦¬λ•μŠ€μ˜ μƒνƒœ λ˜λŠ” μ•‘μ…˜ 생성 ν•¨μˆ˜λ₯Ό μ»΄ν¬λ„ŒνŠΈμ˜ props둜 λ°›μ•„μ˜¬ 수 μžˆλ‹€.

useSelector, useDispatch, useStore: μ†μ‰½κ²Œ μƒνƒœλ₯Ό μ‘°νšŒν•˜κ±°λ‚˜ μ•‘μ…˜μ„ λ””μŠ€νŒ¨μΉ˜ ν•  수 μžˆλ‹€.

 

λ¦¬λ•μŠ€λŠ” μ–Έμ œ 써야 ν• κΉŒ?

  1. ν”„λ‘œμ νŠΈμ˜ 규λͺ¨κ°€ 큰가?
    • Yes: λ¦¬λ•μŠ€
    • No: Context API
  2. 비동기 μž‘μ—…μ„ 자주 ν•˜κ²Œ λ˜λŠ”κ°€?
    • Yes: λ¦¬λ•μŠ€
    • No: Context API
  3. λ¦¬λ•μŠ€λ₯Ό λ°°μ›Œλ³΄λ‹ˆκΉŒ μ‚¬μš©ν•˜λŠ”κ²Œ νŽΈν•œκ°€?
    • Yes: λ¦¬λ•μŠ€
    • No: Context API λ˜λŠ” MobX

 

 

1. λ¦¬λ•μŠ€μ—μ„œ μ‚¬μš©λ˜λŠ” ν‚€μ›Œλ“œ

 

μ•‘μ…˜ (Action)

{
  type: "TOGGLE_VALUE"
}

 

μ•‘μ…˜ μƒμ„±ν•¨μˆ˜ (Action Creator)

μ•‘μ…˜μ„ λ§Œλ“œλŠ” ν•¨μˆ˜

export function addTodo(data) {
  return {
    type: "ADD_TODO",
    data
  };
}

// ν™”μ‚΄ν‘œ ν•¨μˆ˜λ‘œλ„ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.
export const changeInput = text => ({ 
  type: "CHANGE_INPUT",
  text
});

 

λ¦¬λ“€μ„œ (Reducer)

λ³€ν™”λ₯Ό μΌμœΌν‚€λŠ” ν•¨μˆ˜

function reducer(state, action) {
  // μƒνƒœ μ—…λ°μ΄νŠΈ 둜직
  return alteredState;
}

state: ν˜„μž¬ μƒνƒœ

+

action

=> μƒˆλ‘œμš΄ μƒνƒœλ₯Ό λ§Œλ“€μ–΄μ„œ λ°˜ν™˜

(+) Root Reducer: μ—¬λŸ¬ 개의 λ¦¬λ“€μ„œλ₯Ό λ§Œλ“€κ³  이λ₯Ό ν•©μ³μ„œ 루트 λ¦¬λ“€μ„œλ₯Ό λ§Œλ“¦

 

μŠ€ν† μ–΄ (Store)

ν˜„μž¬μ˜ μ•± μƒνƒœ, λ¦¬λ“€μ„œ, λ‚΄μž₯ν•¨μˆ˜λ“€μ΄ λ“€μ–΄μžˆλ‹€.

 

λ””μŠ€νŒ¨μΉ˜ (dispatch)

  - μ•‘μ…˜μ„ λ°œμƒ μ‹œν‚€λŠ” 것

  - μ•‘μ…˜μ„ νŒŒλΌλ―Έν„°λ‘œ μ „λ‹¬ν•œλ‹€. dispatch(action)

  - ν˜ΈμΆœν•˜λ©΄ μŠ€ν† μ–΄λŠ” λ¦¬λ“€μ„œ ν•¨μˆ˜λ₯Ό μ‹€ν–‰μ‹œμΌœμ„œ ν•΄λ‹Ή μ•‘μ…˜μ„ μ²˜λ¦¬ν•˜λŠ” 둜직이 μžˆλ‹€λ©΄ μ•‘μ…˜μ„ μ°Έκ³ ν•˜μ—¬ μƒˆλ‘œμš΄ μƒνƒœλ₯Ό λ§Œλ“€μ–΄μ€€λ‹€.

  - μŠ€ν† μ–΄μ˜ λ‚΄μž₯ν•¨μˆ˜ 쀑 ν•˜λ‚˜

 

ꡬ독 (subscribe)

  - ν•¨μˆ˜ ν˜•νƒœμ˜ 값을 νŒŒλΌλ―Έν„°λ‘œ λ°›μ•„μ˜¨λ‹€.

  - subscribe ν•¨μˆ˜μ— νŠΉμ • ν•¨μˆ˜λ₯Ό 전달해주면, μ•‘μ…˜μ΄ λ””μŠ€νŒ¨μΉ˜ λ˜μ—ˆμ„ λ•Œλ§ˆλ‹€ 전달해쀀 ν•¨μˆ˜κ°€ ν˜ΈμΆœλœλ‹€.

  - μŠ€ν† μ–΄μ˜ λ‚΄μž₯ν•¨μˆ˜ 쀑 ν•˜λ‚˜

 

 

2. λ¦¬λ•μŠ€μ˜ 3가지 κ·œμΉ™

 

1. ν•˜λ‚˜μ˜ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ μ•ˆμ—λŠ” ν•˜λ‚˜μ˜ μŠ€ν† μ–΄κ°€ μžˆλ‹€.

 

2.  μƒνƒœλŠ” 읽기 μ „μš©μ΄λ‹€.

=> 기쑴의 μƒνƒœλŠ” 건듀이지 μ•Šκ³  μƒˆλ‘œμš΄ μƒνƒœλ₯Ό μƒμ„±ν•˜μ—¬ μ—…λ°μ΄νŠΈν•œλ‹€. λΆˆλ³€μ„±!!!

 

3. λ¦¬λ“€μ„œλŠ” μˆœμˆ˜ν•¨μˆ˜μ—¬μ•Ό ν•œλ‹€.

  • λ¦¬λ“€μ„œ ν•¨μˆ˜λŠ” 이전 μƒνƒœμ™€, μ•‘μ…˜ 객체λ₯Ό νŒŒλΌλ―Έν„°λ‘œ λ°›μŠ΅λ‹ˆλ‹€.
  • μ΄μ „μ˜ μƒνƒœλŠ” μ ˆλŒ€λ‘œ 건듀이지 μ•Šκ³ , λ³€ν™”λ₯Ό μΌμœΌν‚¨ μƒˆλ‘œμš΄ μƒνƒœ 객체λ₯Ό λ§Œλ“€μ–΄μ„œ λ°˜ν™˜ν•©λ‹ˆλ‹€.
  • λ˜‘κ°™μ€ νŒŒλΌλ―Έν„°λ‘œ 호좜된 λ¦¬λ“€μ„œ ν•¨μˆ˜λŠ” μ–Έμ œλ‚˜ λ˜‘같은 결과값을 λ°˜ν™˜ν•΄μ•Όλ§Œ ν•©λ‹ˆλ‹€.

 

 

'πŸ“š > γ„΄ React' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[React] DOM(돔)μ΄λž€? Virtual DOM(가상 돔)μ΄λž€?  (0) 2020.12.08