« Tüm yayınlar

useEffect Bir Yaşam Döngüsü Metodu Değildir

useEffect'i componentDidMount gibi düşünmek yarış durumlarına yol açar. Doğru zihinsel model: dış kaynaklarla senkronizasyon, zamanlama değil.

Bu yazı, React geliştiricilerinin useEffect'i class component'lerdeki componentDidMount ve componentDidUpdate metodlarına benzeterek yanlış bir zihinsel model kurduğunu savunuyor. Bu benzetme çoğu durumda işe yarar gibi görünse de, özellikle veri çekme (data fetching) senaryolarında ciddi hatalara yol açar.

Yazar, useEffect'in aslında 'component ne zaman monte edildi' sorusuna değil, 'React dışındaki bir şeyi mevcut state ile nasıl senkronize ederim' sorusuna cevap verdiğini gösteriyor. Bir kullanıcı ID'sine bağlı fetch isteği örneğinde, dependency değiştiğinde önceki isteğin iptal edilmemesi durumunda klasik bir yarış durumu (race condition) oluşuyor: yavaş yanıt geç geldiğinde eski veri güncel veriyi eziyor. Cleanup fonksiyonunun görevi component unmount olduğunda çalışmak değil, bir sonraki senkronizasyon döngüsü başlamadan önce öncekini temizlemektir.

Mühendisler için pratik çıkarım net: useEffect ile ilgili garip davranışların çoğu 'ne zaman çalışır' sorusuna odaklanmaktan kaynaklanıyor. Doğru soru 'neyi, neyle senkronize ediyorum' olmalı. Bu çerçeve, subscription ve fetch gibi yaygın kalıplarda cleanup mantığını çok daha tutarlı hale getiriyor ve önlenebilir bug'ların önüne geçiyor.

» KaynakDev.to