Stale closure problemi nedir? React'te nasıl ortaya çıkar?
Cevap
Bir fonksiyon, oluşturulduğu render'daki değerleri yakalar. O fonksiyon sonraki render'larda da çalışmaya devam ederse eski (bayat) değerleri görür.
function Kronometre() {
const [saniye, setSaniye] = useState(0);
useEffect(() => {
const id = setInterval(() => {
setSaniye(saniye + 1); // saniye her zaman 0 → ekranda hep 1
}, 1000);
return () => clearInterval(id);
}, []); // effect bir kez çalıştı, ilk closure'ı tutuyor
}Çözümler:
- Fonksiyonel güncelleme:
setSaniye(s => s + 1) - Değeri bağımlılık dizisine eklemek (effect her değişimde yeniden kurulur)
- En güncel değeri bir
useRefiçinde tutmak
İlgili React soruları
- Virtual DOM nedir ve reconciliation nasıl çalışır?
- Listelerde key prop neden önemlidir? Index kullanmak neden sorunludur?
- Controlled ve uncontrolled component farkı nedir?
- useEffect bağımlılık dizisi nasıl çalışır?
- useMemo ile useCallback arasındaki fark nedir?
- Gereksiz render'ları nasıl tespit eder ve önlersiniz?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.