κ·Έκ²μ μ½ν¬!
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("μ΄λ―Έ μΆκ°λ μνμ
λλ€."));
}
};
β¨β¨ νμν λΆλΆμ²λΌ μμ±νλ©΄ λλ κ±° μλκ° μΆμ 건λ°...
λͺ¨λ₯΄κ²μΌλ, κ³ μκ°λ°μλλ€κ» μ§λ¬Έμ λ¨κ²¨λκ³ ν¬μ€ν
μ λ§λ¬΄λ¦¬νλ€...