CodeBlanks Logo Icon CodeBlanks

Özet - useReducer

reducer, dispatch ve initial state'i birleştirerek bir alışveriş sepeti yazarsın.

Özet - useReducer

Bu grupta useReducer'ı öğrendin. reducer state'i hesaplayan saf fonksiyondur, dispatch action gönderir, initial state başlangıç değeridir. Bunları birleştirerek karmaşık state'i yönetirsin.

Şimdi bir alışveriş sepeti yazacaksın: reducer, sepete ürün ekleme action'ını işler; dispatch butondan çağrılır. Bu, gerçek dünyada useReducer'ın en sık kullanıldığı senaryolardan biridir. Önce reducer'ı, sonra bileşeni yazacaksın; sonunda çalışan bir sepet ortaya çıkacak.

Uygulama Sepet reducer'ı yaz

Bir cartReducer fonksiyonu yaz. state bir dizi olsun (ürünler). switch (action.type) ile "add" case'inde [...state, action.payload] döndür. default dalında state döndür.

Başlangıç kodu

App.js
// cartReducer fonksiyonunu yaz
// state bir dizi; action bir nesne
// switch ile add ve default dallarını yaz

Örnek çözüm

App.js
function cartReducer(state, action) {
  switch (action.type) {
    case "add":
      return [...state, action.payload];
    default:
      return state;
  }
}

Uygulama Sepet bileşeni yaz

Bir Cart bileşeni yaz. useReducer'ı cartReducer ve [] initial state ile çağır. Bir butona basıldığında dispatch({ type: "add", payload: "Elma" }) çağrılsın. Bileşen <Text>{state.length}</Text> döndürsün.

Başlangıç kodu

App.js
// useReducer'ı içe aktar

// cartReducer fonksiyonunu tanımla (state bir dizi)
// add case'inde [...state, action.payload] döndür

function Cart() {
  // useReducer'ı cartReducer ve boş dizi ile çağır
  // Butona basınca ürün ekleme action'ı gönder

  return <Text>Sepet</Text>;
}

Örnek çözüm

App.js
import { useReducer } from "react";
import { Button, Text } from "react-native";

function cartReducer(state, action) {
  switch (action.type) {
    case "add":
      return [...state, action.payload];
    default:
      return state;
  }
}

function Cart() {
  const [state, dispatch] = useReducer(cartReducer, []);
  return (
    <>
      <Button onPress={() => dispatch({ type: "add", payload: "Elma" })} title="Ekle" />
      <Text>{state.length}</Text>
    </>
  );
}

Soru ve cevaplar

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

1 useReducer hangi durumda uygundur?

App.js
const [state, dispatch] = useReducer(reducer, initialState);
  • Karmaşık state geçişlerinde Doğru cevap
  • Stil verisinde
  • AsyncStorage'da
  • Navigasyonda

Açıklama: useReducer karmaşık state geçişleri için uygundur.

2 Parçayı rolüne eşle

Kavram Anlamı
reducer State'i hesaplar
dispatch Action gönderir
initialState Başlangıç değeri
action.payload Ek veri

3 useReducer'ı çağır

Soru
const [state, dispatch] = ____(cartReducer, []);
Cevap
const [state, dispatch] = useReducer(cartReducer, []);

Açıklama: useReducer cartReducer ve boş dizi alır.

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