CodeBlanks Logo Icon CodeBlanks

Özet - Hooks

useEffect, useRef ve useMemo'yu birleştirerek bir zamanlayıcı yazarsın.

Özet - Hooks

Bu grupta dört temel hook'u öğrendin. useEffect yan etkileri mount ve update anlarında çalıştırır; dependency array ile yeniden çalışma koşulunu belirlersin. cleanup ile kaynağı serbest bırakır, useRef ile render'sız mutable referans tutarsın.

useMemo ise pahalı hesabı önbelleğe alır. Şimdi bunları birleştirip bir zamanlayıcı bileşeni yazacaksın: useEffect zamanlayıcıyı kurar, useRef kimliği tutar, cleanup ile durdurulur. Bu, gerçek uygulamalarda sık göreceğin bir desendir.

Uygulama useEffect ile sayaç kur

Bir Stopwatch bileşeni yaz. useState ile seconds state'i tut. useEffect içinde setInterval ile her saniye seconds'u bir artır; dependency array [] olsun (yalnızca mount). Cleanup ile clearInterval çağır. Bileşen <Text>{`Süre: ${seconds}`}</Text> döndürsün.

Başlangıç kodu

App.js
// useEffect ve useState'i içe aktar

function Stopwatch() {
  const [seconds, setSeconds] = useState(0);
  // useEffect içinde setInterval başlat; cleanup döndür; dizi boş olsun

  return <Text>Süre: {seconds}</Text>;
}

Örnek çözüm

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

function Stopwatch() {
  const [seconds, setSeconds] = useState(0);
  useEffect(() => {
    const id = setInterval(() => setSeconds(s => s + 1), 1000);
    return () => clearInterval(id);
  }, []);
  return <Text>Süre: {seconds}</Text>;
}

Uygulama useRef ile zamanlayıcı kimliği

Aynı Stopwatch bileşenine useRef ekle. idRef oluştur (ilk değer null). setInterval sonucunu idRef.current'e ata. Cleanup'ta clearInterval(idRef.current) çağır. Bileşen <Text>Süre</Text> döndürsün.

Başlangıç kodu

App.js
// useEffect, useRef ve useState'i içe aktar

function Stopwatch() {
  const [seconds, setSeconds] = useState(0);
  // idRef oluştur (ilk değer null)
  // useEffect içinde setInterval'i idRef.current'e ata; cleanup döndür

  return <Text>Süre</Text>;
}

Örnek çözüm

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

function Stopwatch() {
  const [seconds, setSeconds] = useState(0);
  const idRef = useRef(null);
  useEffect(() => {
    idRef.current = setInterval(() => setSeconds(s => s + 1), 1000);
    return () => clearInterval(idRef.current);
  }, []);
  return <Text>Süre</Text>;
}

Soru ve cevaplar

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

1 Bu bileşende cleanup ne işe yarar?

App.js
useEffect(() => {
  const id = setInterval(tick, 1000);
  return () => clearInterval(id);
}, []);
  • Zamanlayıcıyı durdurur Doğru cevap
  • Yeni efekt ekler
  • Hiçbir şey
  • State oluşturur

Açıklama: Cleanup, setInterval'i clearInterval ile durdurur.

2 Hook'u rolüne eşle

Kavram Anlamı
useEffect Yan etki
useRef Mutable referans
useMemo Hesap önbelleği
cleanup Kaynağı bırakır

3 Hook'u içe aktar

Soru
import { ____ } from "react";
Cevap
import { useMemo } from "react";

Açıklama: useMemo hook'u içe aktarıldı.

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