CodeBlanks Logo Icon CodeBlanks

Aksiyon tipleri

Aksiyon tiplerini sabit olarak tanımlamayı öğrenirsin.

Aksiyon tipleri

Aksiyon tipleri genellikle string sabitler olarak tanımlanır: const ADD = "ADD"; const REMOVE = "REMOVE";. Bu, yazım hatasını önler ve refactor'u kolaylaştırır.

Birden çok dosyada aynı string kullanıldığında, bir harf hatası uzun süre fark edilmeyebilir. Sabit kullanırsan IDE otomatik tamamlama ve hata denetimi sağlar. Bu yüzden ekip çalışmasında neredeyse zorunludur.

Tip güvenliği için TypeScript kullanılıyorsa, type Action = { '{ type: typeof ADD; payload: Item }' } | ... şeklinde bir birleşim tipi (union type) tanımlanır. Bu derleme zamanında hataları yakalar.

Payload kullanımı

Payload, aksiyonun ek verisini taşır. { '{ type: "ADD", payload: { id: 1, name: "Ekmek" } }' } gibi. Reducer, payload'ı alıp state'e ekler.

Payload olmadan da aksiyon olabilir: { '{ type: "CLEAR" }' }. Bu, state'i sıfırlamak gibi durumlarda yeterlidir. Her aksiyon payload taşımak zorunda değildir.

İyi alışkanlık: payload'ın tipini tutarlı tut. Bir aksiyon bazen nesne bazen sayı taşırsa, kod okunması zorlaşır. Tek tip payload daha temizdir.

Uygulama Aksiyon sabitleri ve reducer

Aşağıdaki iskeleti tamamla. ADD ve REMOVE sabitlerini string olarak tanımla. listReducer fonksiyonu yaz: switch(action.type) ile ADD case'inde { '{ ...state, items: [...state.items, action.payload] }' } döndür; REMOVE case'inde { '{ ...state, items: state.items.filter(i => i.id !== action.payload.id) }' } döndür; default state döndürsün. Reducer'ı dışa aktar.

Başlangıç kodu

App.jsx
// Sabitleri ve listReducer'ı buraya yaz

Örnek çözüm

App.jsx
const ADD = "ADD";
const REMOVE = "REMOVE";

function listReducer(state, action) {
  switch (action.type) {
    case ADD:
      return { ...state, items: [...state.items, action.payload] };
    case REMOVE:
      return { ...state, items: state.items.filter((i) => i.id !== action.payload.id) };
    default:
      return state;
  }
}

export default listReducer;

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Aksiyon tipleri neden sabit?

  • Daha hızlı çalışmak
  • useEffect'i atlamak
  • Yazım hatasını önlemek Doğru cevap
  • CSS'i değiştirmek

Açıklama: Sabitler yazım hatasını önler.

2 Aksiyon alanı

Soru
Aksiyonun türünü taşıyan alan ____ alanıdır.
Cevap
Aksiyonun türünü taşıyan alan type alanıdır.

Açıklama: type alanı aksiyon türünü taşır.

3 Aksiyon alanlarını eşleştir

Kavram Anlamı
type Tür
payload Ek veri
ADD Ekle
CLEAR Sıfırla

Orta seviye bölümündeki tüm dersler