React uygulamalarında API verilerini yönetmek, modern web geliştirmenin kritik bir parçasıdır. React Query (TanStack Query) ve SWR (stale-while-revalidate), bu alanda en çok tercih edilen iki kütüphanedir. Her ikisi de önbellekleme, yeniden doğrulama ve durum yönetimini basitleştirir, ancak farklı felsefelere ve güçlü yönlere sahiptir. Bu yazıda, projeniz için doğru seçimi yapmanıza yardımcı olmak üzere React Query ve SWR'yi kapsamlı bir şekilde karşılaştırıyoruz.
React Query ve SWR Nedir?
React Query, sunucu durumunu yönetmek için güçlü bir kütüphanedir. Önbellek yönetimi, otomatik yeniden doğrulama, sayfalama ve sonsuz sorgular gibi gelişmiş özellikler sunar. SWR ise Vercel tarafından geliştirilmiş, hafif ve basit bir kütüphanedir; adını HTTP önbellekleme stratejisi "stale-while-revalidate"den alır. Temel amaç, hızlı ve duyarlı bir kullanıcı deneyimi sağlamaktır.
Karşılaştırma Tablosu
| Özellik | React Query (v5) | SWR (v2) |
|---|---|---|
| Paket Boyutu | ~13.7 kB (gzip) | ~4.3 kB (gzip) |
| Önbellek Yönetimi | Varsayılan olarak güçlü, yapılandırılabilir | Basit, HTTP önbellekleme stratejisine dayalı |
| Otomatik Yeniden Doğrulama | Arka planda, odaklanma, ağ yeniden bağlanma | Odaklanma, aralıklı yeniden doğrulama |
| Sayfalama / Sonsuz Sorgular | Yerleşik destek | Eklenti ile (SWRInfinite) |
| Mutation Desteği | İleri düzey (optimistik güncelleme, rollback) | Temel (manuel güncelleme) |
| TypeScript Desteği | Mükemmel (tür güvenliği) | İyi (ancak daha az sıkı) |
| Öğrenme Eğrisi | Orta | Düşük |
| Topluluk ve Ekosistem | Geniş, aktif, devtools | Büyük, ancak daha küçük ekosistem |
Detaylı Özellik Karşılaştırması
Önbellek Yönetimi ve Yeniden Doğrulama
React Query, varsayılan olarak akıllı bir önbellek stratejisi sunar. Verileri otomatik olarak yeniden doğrular ve arka planda günceller. Stale zamanı ve cache zamanı gibi ince ayarlar yapmanıza olanak tanır. SWR ise daha basit bir model izler: veri eski olarak işaretlenir ve tekrar talep edildiğinde yeniden doğrulanır. Performans açısından her iki kütüphane de hızlıdır, ancak React Query daha karmaşık senaryolarda (örneğin, sayfalama) daha iyi optimizasyon sağlar.
Mutation ve Veri Güncelleme
React Query, useMutation ile güçlü bir mutasyon yönetimi sunar. Optimistik güncellemeler, hata durumunda geri alma ve başarılı mutasyon sonrası sorguları geçersiz kılma gibi özellikler yerleşiktir. SWR'de mutasyonlar daha manueldir; veri güncellemek için mutate fonksiyonunu kullanırsınız ancak optimistik güncellemeler ve otomatik geçersiz kılma için ek kod yazmanız gerekir. Bu nedenle, sık mutasyon yapan uygulamalar (örneğin, form tabanlı uygulamalar) için React Query daha uygundur.
Boyut ve Performans
SWR, React Query'ye göre çok daha küçük bir paket boyutuna sahiptir (~4 kB vs ~14 kB). Basit bir veri çekme işlemi için SWR daha hafif bir seçenektir. Ancak React Query'nin sağladığı gelişmiş özellikler, büyük ve karmaşık uygulamalarda uzun vadede daha fazla performans ve bakım kolaylığı sağlayabilir. Projenizin ihtiyaçlarını değerlendirirken bu dengeyi göz önünde bulundurmalısınız.
Hangi Durumda Hangisi Seçilmeli?
Aşağıdaki listede, her iki kütüphanenin ideal kullanım senaryolarını bulabilirsiniz:
- React Query seçin:
- Karmaşık önbellek yönetimi ihtiyacınız varsa.
- Sık mutasyonlar ve optimistik güncellemeler yapacaksanız.
- Sayfalama, sonsuz sorgular veya bağımlı sorgular gibi gelişmiş desenler kullanacaksanız.
- TypeScript ile tam tür güvenliği istiyorsanız.
- Devtools gibi ek araçlardan faydalanmak istiyorsanız.
- SWR seçin:
- Basit, hafif bir çözüm arıyorsanız.
- Hızlı bir başlangıç ve düşük öğrenme eğrisi istiyorsanız.
- Projenizin çoğunlukla basit GET isteklerinden oluşuyorsa.
- Paket boyutunun kritik olduğu durumlarda (örneğin, Next.js ile sunucu tarafında kullanım).
Popüler Kullanım Senaryoları
React Query ile Sayfalama
React Query, useQuery ve useInfiniteQuery ile sayfalama ve sonsuz kaydırmayı kolaylaştırır. Örneğin, bir sonraki sayfa butonuna tıklandığında otomatik olarak yeni veri çekilir ve önbellek yönetilir. Bu, büyük listelerle çalışan uygulamalar (e-ticaret, sosyal medya) için idealdir.
SWR ile Hızlı Veri Çekme
SWR, özellikle statik ve yarı statik içeriklerde (örneğin blog yazıları, ürün detayları) hızlı bir kullanıcı deneyimi sunar. useSWR ile veriyi çeker ve eski veriyi gösterirken arka planda yeniler. Next.js projelerinde sıkça tercih edilir.
Sık Yapılan Hatalar
- Gereksiz önbellek süreleri ayarlamak: Her iki kütüphanede de stale time ve cache time ayarlarını yanlış yapılandırmak, veri tutarlılığını bozabilir. Varsayılan değerlerin farkında olun ve ihtiyaca göre ayarlayın.
- Mutation sonrası sorgu geçersiz kılmayı unutmak: React Query'de
queryClient.invalidateQueriesçağırmazsanız, mutasyondan sonra liste güncellenmez. SWR'de isemutateile ilgili anahtarı güncellemeyi unutmayın. - Server state ile client state'i karıştırmak: React Query ve SWR yalnızca sunucu durumunu yönetir. UI durumları için ayrı bir state yönetimi (Context, Redux, Zustand) kullanmalısınız.
Sonuç: Projeniz İçin En İyi Seçim
React Query ve SWR arasında seçim yaparken, projenizin karmaşıklığı ve boyutu belirleyicidir. Eğer büyük ölçekli, mutasyon yoğun bir uygulama geliştiriyorsanız React Query daha uygunken; küçük, hızlı başlamanız gereken projelerde SWR idealdir. Her iki kütüphane de sağlam ve güvenilirdir. JavaScript performansını artırmak için debounce ve throttle gibi teknikleri de uygulayabilirsiniz. Ayrıca, Next.js ile çalışıyorsanız App Router entegrasyonunu keşfetmek isteyebilirsiniz. Unutmayın, doğru kütüphane seçimi, uzun vadede bakım maliyetlerini düşürür.
Sık Sorulan Sorular
React Query ve SWR arasında performans farkı var mı?
Temel veri çekme işlemlerinde performans farkı ihmal edilebilir düzeydedir. Ancak React Query, gelişmiş önbellek ve mutasyon yönetimi sayesinde karmaşık senaryolarda daha iyi optimize olabilir. SWR, daha küçük paket boyutuyla basit durumlarda daha hızlı yüklenir.
SWR'nin React Query'ye göre avantajı nedir?
SWR, daha hafif (yaklaşık 4 kB gzip) ve öğrenmesi daha kolaydır. Basit veri çekme ihtiyaçları için idealdir ve Next.js ile sorunsuz çalışır. React Query ise daha fazla özellik sunar ancak daha büyük bir paket ve öğrenme eğrisine sahiptir.
React Query'yi SWR'ye dönüştürmek zor mu?
Her iki kütüphane de benzer hook yapılarına sahiptir (useQuery vs useSWR). Temel kullanımda geçiş yapmak nispeten kolaydır, ancak özel önbellek konfigürasyonları ve mutasyon yönetimi farklılıkları nedeniyle bazı kod değişiklikleri gerekebilir.






