😨😱😰 μ•‘μ…˜μƒμ‚°μžκ°€ λœ¬κΈˆμ—†μ΄ ν•¨μˆ˜λ₯Ό λ¦¬ν„΄ν•˜λ©΄?

9rganizedChaosΒ·2021λ…„ 2μ›” 23일
0

그것은 썽크!
Redux-thunk!

μ™œ κ°‘μžκΈ° μ•‘μ…˜μƒμ‚°μžκ°€ ν•¨μˆ˜λ₯Ό 리턴? (띠용)

  const handleClick = (item) => {
    if (!cartItems.map((el) => el.itemId).includes(item.id)) {
      dispatch(addToCart(item.id));
      dispatch(notify(`μž₯λ°”κ΅¬λ‹ˆμ— ${item.name}이(κ°€) μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€.`));
      // notify(`μž₯λ°”κ΅¬λ‹ˆμ— ${item.name}이(κ°€) μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€.`)(dispatch);
    } else {
      dispatch(notify("이미 μΆ”κ°€λœ μƒν’ˆμž…λ‹ˆλ‹€."));
    }
  };
//[μ•‘μ…˜μƒμ‚°μž]
export const notify = function (message, dismissTime = 5000) {
  return function (dispatch) {
    const uuid = Math.random();
    dispatch(enqueueNotification(message, dismissTime, uuid));
    setTimeout(() => {
      dispatch(dequeueNotification());
    }, dismissTime);
  };
};

μ½”λ“œλ₯Ό 잘 μ‚΄νŽ΄λ³΄λ©΄, dispatch(notify(μž₯λ°”κ΅¬λ‹ˆμ— ${item.name}이(κ°€) μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€.)) 이런 μ‹μœΌλ‘œ μ½”λ“œκ°€ μž‘μ„±λœ 것을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.
λ¦¬λ•μŠ€λ₯Ό 처음 κ³΅λΆ€ν•˜λ˜ 제 μž…μž₯μ—μ„œλŠ” notify(μž₯λ°”κ΅¬λ‹ˆμ— ${item.name}이(κ°€) μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€.) << 이 뢀뢄이 λ¦¬ν„΄ν•˜λŠ” 건 'νƒ€μž…' 속성을 κ°–λŠ” 객체도 μ•„λ‹ˆκ³  κ·Έλƒ₯ ν•¨μˆ˜μΈλ° λ””μŠ€νŒ¨μΉ˜λ₯Ό ν•΄μ„œ 뭘 μ–΄μ©Œκ² λ‹€λŠ” 걸까... μ‹Άμ—ˆμŠ΅λ‹ˆλ‹€...

ν—¬ν”„λ°μŠ€ν¬μ— μ°Ύμ•„λ³΄λ‹ˆ!
μ•„λ‹ˆλ‚˜ λ‹€λ₯ΌκΉŒ λ˜‘κ°™μ€ μ§ˆλ¬Έμ„ ν•˜μ‹  뢄이 계셨고,
그에 λŒ€ν•œ 닡변은...!

notify ν•¨μˆ˜λŠ” κ·Έ μžμ²΄κ°€ μ•‘μ…˜μ΄ λ˜μ–΄ λ°”λ‘œ λ¦¬λ“€μ„œμ— μ „λ‹¬λ˜μ§€ μ•Šκ³ 
κ·Έ μ•ˆμ—μ„œ enqueueNotificationκ³Ό dequeueNotificationμ΄λΌλŠ” 각각의 μ•‘μ…˜μ„
인자둜 λ°›μ•„μ˜¨ dispatchν•¨μˆ˜λ₯Ό μ΄μš©ν•΄ λ™κΈ°μ μœΌλ‘œ λ¦¬λ“€μ„œμ— μ „λ‹¬ν•΄μ€λ‹ˆλ‹€.

κ·Έλž˜μ„œ thunk에 λŒ€ν•΄ μ’€ 더 κ³΅λΆ€ν•΄λ³΄κΈ°λ‘œ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

비동기 μ•‘-μˆ€ 컨트둀!

λ¦¬λ•μŠ€μ—μ„œ μ•‘μ…˜ μƒμ‚°μžκ°€ ν•¨μˆ˜λ₯Ό λ°˜ν™˜ν•˜λ©΄, Redux 썽크 미듀웨어가 μΆœλ™ν•΄μ„œ 싀행함!
(그리고, 이 ν•¨μˆ˜λŠ” 동기 μ•‘μ…˜μ„ 보낸닀!)

μ•„λž˜λŠ” Redux-thunk μ†Œ-슀 μ½”λ“œ πŸ™Œ πŸ’–
(14쀄 밖에 μ•ˆλ˜λŠ” λ§ˆλ²•μ˜ μ½”λ“œ)

function createThunkMiddleware(extraArgument) {
  return ({ dispatch, getState }) => (next) => (action) => {
    if (typeof action === 'function') {
      return action(dispatch, getState, extraArgument);
    }

    return next(action);
  };
}

const thunk = createThunkMiddleware();
thunk.withExtraArgument = createThunkMiddleware;

export default thunk;

이 μ½”λ“œλ₯Ό μ‚΄νŽ΄λ³΄λ©΄ λ¦¬λ•μŠ€μ˜ 원리λ₯Ό 쑰금 더 잘 이해할 수 μžˆμ„ λ“― μ‹Άλ‹€...
사싀 λ§¨μœ„μ— 두 쀄은 썩 잘 이해가 μ•ˆ κ°€κ³ ...
밑에 뢀뢄을 보면...

이프! μ•‘μˆ€μ΄ ν•¨μˆ˜λ©΄!

-> λ””μŠ€νŒ¨μΉ˜λž‘, κ²ŸμŠ€ν…Œμ΄νŠΈλž‘, μ—‘μŠ€νŠΈλΌμ•„κ·œλ¨ΌνŠΈλ₯Ό μ•‘μˆ€μ— λ‹΄μ•„μ„œ λ¦¬ν„΄ν•˜κ³ 

μ•„λ‹ˆλ©΄!

-> λ¦¬λ“€μ„œλ‘œ μ•‘μ…˜μ„ 보낸닀?

이걸 μœ„ μ½”λ“œμ—μ„œ μƒκ°ν•΄λ³΄μž!

<κ°€μ •> λ²„νŠΌμ„ λˆŒλŸ¬μ„œ 'handleClick' ν•¨μˆ˜κ°€ μ‹€ν–‰λ˜μ—ˆκ³ , μž₯λ°”κ΅¬λ‹ˆμ— 마침 μΆ”κ°€ν•œ μ• κ°€ μ—†μ–΄μ„œ, 첫번째 이프문이 μ‹€ν–‰λ˜μ—ˆλ‹€.

1) dispatch(notify('μž₯λ°”κ΅¬λ‹ˆμ— ${item.name}이(κ°€) μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€.')) μ–˜κ°€ 싀행됨
2) notify ν•¨μˆ˜κ°€ λ¦¬ν„΄ν•˜λŠ” 것은 νŽ‘μ…˜μž„! (μ•„λž˜μ™€ 같은 ν•¨μˆ˜!)

function (dispatch) {
    const uuid = Math.random();
    dispatch(enqueueNotification(message, dismissTime, uuid));
    setTimeout(() => {
      dispatch(dequeueNotification());
    }, dismissTime);
  };

3) λ””μŠ€νŒ¨μΉ˜μ— λ‹΄κΈ΄κ²Œ 객체가 μ•„λ‹ˆκ³  νŽ‘μ…˜μ΄λ‹ˆκΉŒ...
4) thunkμ—μ„œ notify에 dispatch 인자λ₯Ό λ„£μ–΄μ„œ μ‹€ν–‰ν•œλ‹€!
5) 인큐노티와 디큐노티가 각각 μ•‘μ…˜κ°μ²΄λ₯Ό μƒμ„±ν•΄μ„œ λ””μŠ€νŒ¨μΉ˜ν•œλ‹€!

사싀 4번 뢀뢄이 썩 잘 μ΄ν•΄λŠ” μ•ˆ κ°€μ§€λ§Œ...
μ•„λ¬΄νŠΌ 이런 μ‹μœΌλ‘œ λ¦¬λ•μŠ€κ°€ λΉ„λ™κΈ°μ²˜λ¦¬λ₯Ό ν•œλ‹€λŠ” 것을 μ•Œκ³  κ°„λ‹€λŠ” 데에 일단 의의λ₯Ό λ‘κΈ°λ‘œ...

사싀 λ‚΄κ°€ 아직도 이해가 μ•ˆκ°€λŠ” 건...

μ €λ ‡κ²Œ ν•  κ±°λ©΄ 걍 μ• μ΄ˆμ—

  const handleClick = (item) => {
    if (!cartItems.map((el) => el.itemId).includes(item.id)) {
      dispatch(addToCart(item.id));
      notify(`μž₯λ°”κ΅¬λ‹ˆμ— ${item.name}이(κ°€) μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€.`)(dispatch); // ✨✨
    } else {
      dispatch(notify("이미 μΆ”κ°€λœ μƒν’ˆμž…λ‹ˆλ‹€."));
    }
  };

✨✨ ν‘œμ‹œν•œ λΆ€λΆ„μ²˜λŸΌ μž‘μ„±ν•˜λ©΄ λ˜λŠ” κ±° μ•„λ‹Œκ°€ 싢은 건데...
λͺ¨λ₯΄κ²ŸμœΌλ‹ˆ, κ³ μˆ˜κ°œλ°œμžλ‹˜λ“€κ»˜ μ§ˆλ¬Έμ„ 남겨놓고 ν¬μŠ€νŒ…μ€ λ§ˆλ¬΄λ¦¬ν•œλ‹€...

profile
λΆ€μ •ν™•ν•œ μ •λ³΄λ‚˜ 잘λͺ»λœ μ •λ³΄λŠ” λŒ“κΈ€λ‘œ μ•Œλ €μ£Όμ‹œλ©΄ λΉ λ₯΄κ²Œ μˆ˜μ •ν† λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€, κ°μ‚¬ν•©λ‹ˆλ‹€!

0개의 λŒ“κΈ€