CodeBlanks Logo Icon CodeBlanks

Dependency array

useEffect dependency array'sini öğrenirsin.

Dependency array nedir?

useEffect'in ikinci parametresi dependency array'dir (bağımlılık dizisi). Efektin hangi değişikliklerde yeniden çalışacağını belirler. useEffect(effect, [a, b]) yazdığında efekt yalnızca a veya b değiştiğinde çalışır.

Üç temel durum vardır: dizi yoksa her render'da çalışır; boş dizi [] yalnızca mount'ta çalışır; değer listesi [a, b] bu değerlerden biri değiştiğinde çalışır. Yanlış bağımlılık dizisi gereksiz yeniden çalışmalara ya da eski değeri kullanan hataya yol açar; bu yüzden diziyi dikkatle yazmak gerekir.

Üç davranış

Dependency array'in üç davranışını bilmek gerekir. Dizi yoksa efekt her render'dan sonra çalışır. Boş dizi [] ise efekt yalnızca bir kez, mount'ta çalışır; bu en sık kullanılan desendir.

Dolu dizi [a, b] ise efekt mount'ta ve a veya b değiştiğinde çalışır. Diziye ilkel (sayı, dize, boolean) değerler yazılır; nesne ve dizi her render'da yeni referans olduğundan dikkatli olunmalı. Lint denetimi exhaustive-deps bağımlılıkları doğru yazmana yardım eder.

Uygulama Boş dizi ile mount efekti

Bir Logger bileşeni yaz. useEffect kullanarak "Başladı" mesajını console.log ile yaz. Dependency array'i boş bırak ([]) ki yalnızca mount'ta çalışsın. Bileşen <Text>Günlük</Text> döndürsün.

Başlangıç kodu

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

function Logger() {
  // useEffect ile "Başladı" yaz; dizi boş olsun

  return <Text>Günlük</Text>;
}

Örnek çözüm

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

function Logger() {
  useEffect(() => {
    console.log("Başladı");
  }, []);
  return <Text>Günlük</Text>;
}

Soru ve cevaplar

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

1 Boş diziyi tamamla

Soru
useEffect(() => {
  console.log("Mount");
}, ____);
Cevap
useEffect(() => {
  console.log("Mount");
}, []);

Açıklama: Boş dizi yalnızca mount'ta çalıştırır.

2 Bu efekt ne zaman çalışır?

App.js
useEffect(() => {
  saveProfile(profile);
}, [profile]);
  • Yalnızca mount'ta
  • profile değiştiğinde Doğru cevap
  • Hiçbir zaman
  • Her render'da

Açıklama: Dolu dizi profile değişince yeniden çalıştırır.

3 Davranışı senaryoya eşle

Kavram Anlamı
Dizi yok Her render'da
[] Yalnızca mount'ta
[a, b] a veya b değiştiğinde
useEffect Yan etki hook'u

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