CodeBlanks Logo Icon CodeBlanks

useReducer vs useState

useReducer ve useState farkını öğrenirsin.

useReducer vs useState

useReducer ve useState state yöneten iki hook'tur. useState basit, tek değerlik state içindir; useReducer ise karmaşık, ilişkili state içindir. İkisi de state günceller; ama yolları farklıdır.

useState'te güncelleme doğrudan fonksiyonla yapılır: setCount(count + 1). useReducer'da ise bir action gönderilir, reducer yeni state'i hesaplar. Basit bir sayaç için useState yeterlidir; form, sepet veya oyun gibi birden çok alana sahip state için useReducer daha uygundur. Karar verirken state'in karmaşıklığına ve geçiş sayısına bak.

Karar verme

Hangi hook'u seçeceğine karar verirken iki soru sor. Birincisi: state tek bir değer mi, yoksa birbiriyle ilişkili birden çok alan mı? İkincisi: state geçişleri basit midir, yoksa karmaşık iş mantığı mı gerektiriyor?

Tek değer ve basit geçişler için useState uygundur. Birden çok ilişkili alan veya karmaşık geçişler için useReducer daha iyi bir seçimdir. Örneğin bir alışveriş sepeti: ürün ekleme, çıkarma, miktar güncelleme, kupon uygulama gibi birden çok işlem var. Bunların hepsini setCart ile yönetmek karışık olur; useReducer ile her işlem bir action olur ve yönetim kolaylaşır.

Uygulama Basit sayaç (useState)

Bir Counter bileşeni yaz. useState ile count tut (ilk değer 0). Bir butona basıldığında setCount(count + 1) çağrılsın. Bileşen <Text>{count}</Text> döndürsün.

Başlangıç kodu

App.js
// useState'i içe aktar
// Text ve Button'ı react-native'den içe aktar

function Counter() {
  // count state'ini useState ile başlat (ilk değer 0)
  // Butona basınca sayıyı bir artır

  return <Text>Sayaç</Text>;
}

Örnek çözüm

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

function Counter() {
  const [count, setCount] = useState(0);
  return (
    <>
      <Button onPress={() => setCount(count + 1)} title="Artır" />
      <Text>{count}</Text>
    </>
  );
}

Soru ve cevaplar

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

1 Doğru hook'u seç

Soru
const [count, setCount] = ____(0);
Cevap
const [count, setCount] = useState(0);

Açıklama: Basit sayaç için useState yeterlidir.

2 Kavramı rolüne eşle

Kavram Anlamı
useState Tek değerlik state
useReducer Karmaşık state
dispatch Action gönderir
reducer State'i hesaplar

3 Hangi senaryo useReducer için uygundur?

App.js
useReducer(reducer, initialState);
  • Tek bir sayaç
  • Aç/kapa bayrağı
  • Bir metin
  • Alışveriş sepeti Doğru cevap

Açıklama: Alışveriş sepeti useReducer için uygundur.

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