📂 Düzen (Reducer – Slice Mantığı)


❌ Reducer’da API Çağrısı Yapılamaz


🔄 Middleware ile Çözüm

Middleware, dispatch → store arasına girer.

Action önce middleware’den geçer, gerekirse orada API çağrısı yapılır, sonuç alınır → sonra store’a gönderilir.

En popüler middleware: Redux Thunk


⚡ Redux Thunk Mantığı

Action Creator senkron veya asenkron dönebilir:

// Senkron Action
export const deposit = (amount) => ({
  type: "account/deposit",
  payload: amount,
});

// Asenkron Action (Thunk)
export const depositAsync = (amount, currency) => {
  return async function (dispatch, getState) {
    if (currency === "USD") {
      dispatch({ type: "account/deposit", payload: amount });
    } else {
      const res = await fetch(`https://api.frankfurter.app/latest?amount=${amount}&from=${currency}&to=USD`);
      const data = await res.json();
      const converted = data.rates.USD;
      dispatch({ type: "account/deposit", payload: converted });
    }
  };
};

👉 Burada thunk fonksiyonu, dispatch ve getState alır.