Veri Getirme (Data Fetching)
Next.js App Router, fonksiyonu async
olarak işaretleyerek ve Promise için await
kullanarak verileri doğrudan React bileşenlerinizden almanıza olanak tanır.
Veri getirme, fetch()
Web API'si ve React Sunucu Bileşenleri üzerine inşa edilmiştir. fetch()
kullanıldığında, istekler varsayılan olarak otomatik olarak düşülür.
Next.js, her isteğin kendi önbelleğe alma ve yeniden doğrulamasını ayarlamasına izin vermek için fetch
options nesnesini genişletir.
Sunucu Bileşenlerinde async
ve await
async
ve await
Sunucu Bileşenlerinde veri almak için async
ve await
kullanabilirsiniz.
Bilmekte fayda var:
TypeScript ile bir async
Sunucu Bileşeni kullanmak için TypeScript 5.1.3
veya üstünü ve @types/react
18.2.8
veya üstünü kullandığınızdan emin olun.
Sunucu Bileşeni İşlevleri
Next.js, Sunucu Bileşenlerinde veri getirirken ihtiyaç duyabileceğiniz yararlı sunucu işlevleri sağlar:
cookies()
headers()
İstemci Bileşenlerinde use
use
use
, kavramsal olarak await
'e benzer bir promise kabul eden yeni bir React fonksiyonudur. use
, bir fonksiyon tarafından döndürülen promise'i bileşenler, hook'lar ve Suspense ile uyumlu bir şekilde işler. React RFC'de use
hakkında daha fazla bilgi edinin.
fetch
işleminin use
'a sarılması şu anda İstemci Bileşenlerinde önerilmemektedir ve birden fazla yeniden render etmeyi tetikleyebilir. Şimdilik, bir İstemci Bileşeninde veri getirmeniz gerekiyorsa, SWR veya React Query gibi üçüncü taraf bir kütüphane kullanmanızı öneririz.
Statik Veri Getirme (Static Data Fetching)
Varsayılan olarak, fetch
otomatik olarak verileri süresiz olarak getirecek ve önbelleğe alacaktır.
Verileri Yeniden Doğrulama (Revalidating Data)
Önbelleğe alınan verileri belirli bir zaman aralığında yeniden doğrulamak için fetch()
işlevinde next.revalidate
seçeneğini kullanarak bir kaynağın önbellek ömrünü (saniye cinsinden) ayarlayabilirsiniz.
Dinamik Veri Getirme (Dynamic Data Fetching)
Her fetch
isteğinde yeni veri almak için cache: 'no-store'
seçeneğini kullanın.
Veri Getirme Kalıpları (Data Fetching Patterns)
Paralel Veri Getirme (Parallel Data Fetching)
İstemci-sunucu şelalelerini en aza indirmek için, verileri paralel olarak almak üzere bu modeli öneriyoruz:
Sunucu Bileşeninde await
'i çağırmadan önce getirme işlemini başlatarak, her istek aynı anda istekleri getirmeye başlayabilir. Bu, bileşenleri şelalelerden kaçınabileceğiniz şekilde ayarlar.
Her iki isteği paralel olarak başlatarak zamandan tasarruf edebiliriz, ancak kullanıcı her iki söz de çözümlenene kadar işlenen sonucu göremez.
Kullanıcı deneyimini iyileştirmek için, render çalışmasını bölmek ve sonucun bir kısmını mümkün olan en kısa sürede göstermek üzere bir askı sınırı ekleyebilirsiniz:
Sıralı Veri Getirme (Sequential Data Fetching)
Verileri sıralı olarak getirmek için, doğrudan ihtiyaç duyan bileşenin içinden getirebilir veya getirme işleminin sonucunu ihtiyaç duyan bileşenin içinde bekleyebilirsiniz:
Bileşen içinde veri getirerek, rotadaki her bir getirme isteği ve iç içe geçmiş segment, önceki istek veya segment tamamlanana kadar veri getirmeye ve oluşturmaya başlayamaz.
Bir Rotada Oluşturmayı Engelleme (Blocking Rendering in a Route)
Verileri bir layoutta getirerek, altındaki tüm rota segmentleri için işleme yalnızca veriler yüklendikten sonra başlayabilir.
pages
dizininde, sunucu oluşturma kullanan sayfalar getServerSideProps
bitene kadar tarayıcı yükleme döndürücüsünü gösterecek, ardından o sayfa için React bileşenini oluşturacaktı. Bu, "ya hep ya hiç" veri getirme olarak tanımlanabilir. Ya sayfanız için tüm verilere sahip olurdunuz ya da hiçbirine sahip olmazdınız.
app
dizininde, keşfedebileceğiniz ek seçenekler vardır:
İlk olarak, veri getirme işlevinizden gelen sonucu aktarırken sunucudan anlık bir yükleme durumu göstermek için
loading.js
kullanabilirsiniz.İkinci olarak, veri getirme işlemini bileşen ağacında daha aşağıya taşıyarak yalnızca sayfanın ihtiyaç duyulan bölümleri için görüntülemeyi engelleyebilirsiniz. Örneğin, veri getirmeyi kök düzende getirmek yerine belirli bir bileşene taşıyabilirsiniz.
Mümkün olduğunda, verileri onu kullanan segmentte almak en iyisidir. Bu aynı zamanda sayfanın tamamı için değil, yalnızca yüklenen kısmı için bir yükleme durumu göstermenize olanak tanır.
fetch()
olmadan Veri Getirme (Data Fetching without fetch()
)
fetch()
olmadan Veri Getirme (Data Fetching without fetch()
)ORM veya veritabanı istemcisi gibi üçüncü taraf bir kütüphane kullanıyorsanız, fetch
isteklerini doğrudan kullanma ve yapılandırma olanağına her zaman sahip olmayabilirsiniz.
fetch
özelliğini kullanamadığınız ancak yine de bir düzen veya sayfanın önbelleğe alma veya yeniden doğrulama davranışını kontrol etmek istediğiniz durumlarda, segmentin varsayılan önbelleğe alma davranışına güvenebilir veya segment önbelleği yapılandırmasını kullanabilirsiniz.
Varsayılan Önbelleğe Alma Davranışı (Default Caching Behavior)
Doğrudan fetch
kullanmayan herhangi bir veri getirme kütüphanesi bir rotanın önbelleğe alınmasını etkilemeyecek ve rota segmentine bağlı olarak statik veya dinamik olacaktır.
Segment statikse (varsayılan), isteğin çıktısı segmentin geri kalanıyla birlikte önbelleğe alınır ve yeniden doğrulanır (yapılandırılmışsa). Segment dinamikse, isteğin çıktısı önbelleğe alınmaz ve segment işlendiğinde her istekte yeniden taranır.
Segment Önbellek Yapılandırması (Segment Cache Configuration)
Geçici bir çözüm olarak, üçüncü taraf sorgularının önbelleğe alma davranışı yapılandırılana kadar, tüm segmentin önbellek davranışını özelleştirmek için segment yapılandırmasını kullanabilirsiniz.
Last updated