0Pricing
React Academy · Ders

useLayoutEffect ile DOM Ögelerini Ölçme

Titreşimi önlemek için düzen sonrasında, boyama öncesinde öge boyutlarını, konumlarını ve kaydırma uzaklıklarını okuyun

useLayoutEffect ile DOM Ögelerini Ölçme, CoddyKit'te ücretsiz bir React Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, React Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. React Academy kursu toplamda 4 dersten oluşur.

getBoundingClientRect Genel Bakış

element.getBoundingClientRect(), öğenin görüntü alanına göre boyutunu ve konumunu içeren bir DOMRect nesnesi döndürür: top, right, bottom, left, width ve height. Doğru değerleri döndürmek için tarayıcıyı yerleşim hesaplaması yapmaya zorladığından, bunu ölçülü kullanın.

useEffect İçinde Okumanın Sorunu

getBoundingClientRect() değerini bir useEffect içinde okursanız tarayıcı ekrana çizimi zaten tamamlamış olur. Ardından ölçüme göre durumu ayarlarsanız React yeniden oluşturur ve tarayıcı yeniden ekrana çizer. Düzeltme ikinci çizimde görünmeden önce kullanıcılar öğeyi kısa süreliğine yanlış konumda veya yanlış boyutta görebilir.

useLayoutEffect Bunu Neden Çözer

Ölçümleri useLayoutEffect içinde okumak, DOM değişikliklerinden sonra ancak ekrana çizimden önce gerçekleşir. Ölçümün tetiklediği herhangi bir durum güncellemesi React'in eşzamanlı olarak yeniden oluşturmasına ve düzeltilmiş DOM'u uygulamasına neden olur; bunların tamamı tarayıcı herhangi bir şeyi ekrana çizmeden önce gerçekleşir. Kullanıcı tek bir çizim döngüsünde yalnızca nihai ve doğru sonucu görür.

Araç İpucu Konumlandırma

Bir araç ipucunun tetikleyici öğesinin yakınında görünmesi gerekir. getBoundingClientRect() kullanarak tetikleyici öğenin konumunu useLayoutEffect içinde ölçün, araç ipucunun mutlak konumunu hesaplayın ve bu konumu durumda ayarlayın. Araç ipucu, yanlış bir başlangıç konumundan kaynaklanan görünür bir sıçrama olmadan ilk ekrana çizimde doğru konumda oluşturulur.

Öğe Canlandırması: Başlangıç Boyutunu Okuma

Bir öğeyi doğal (kısıtlanmamış) boyutundan sabit bir boyuta canlandırmak için kısıtlama uygulanmadan önce doğal boyutu bilmeniz gerekir. Herhangi bir canlandırma stili uygulanmadan önce öğenin yüksekliğini useLayoutEffect içinde okuyun, bu değeri durumda saklayın ve ardından CSS geçişinizin başlangıç ana kare değeri olarak kullanın.

Sabit Üst Bilginin Yüksekliği

Bir sayfada sabitlenen bir üst bilgi varsa gövde içeriğinin, üst bilginin arkasında gizlenmemesi için üst iç boşluğunun üst bilgi yüksekliğine eşit olması gerekir. Üst bilgi yüksekliğini bir referans kullanarak useLayoutEffect içinde ölçün: headerRef.current.getBoundingClientRect().height. Bunu içerik kapsayıcısında paddingTop olarak ayarlayın. Yerleşim ilk oluşturmadan itibaren doğru olur.

Durum Güncellemesi Eşzamanlı Yeniden Oluşturmaya Yol Açar

useLayoutEffect içinde setState çağırdığınızda React aynı eşzamanlı iş bloğunda hemen başka bir oluşturma ve uygulama döngüsü çalıştırır. Bu yeniden oluşturma, kendi useLayoutEffect'ini de çalıştırır. Sonsuz döngü oluşturmamaya dikkat edin: durumu yalnızca yeni ölçüm geçerli durum değerinden farklıysa güncelleyin.

SSR: Ölçümler Sıfır Döndürür

Sunucuda DOM öğeleri mevcut olmadığından getBoundingClientRect() bir hata verir veya sıfırlar döndürür. useLayoutEffect için bir kontrol kullanın: if (typeof window === 'undefined') return;. SSR uygulamalarında yer tutucu bir boyutla hidrasyon yapmanız ve istemcide hidrasyondan sonra ölçüm almanız gerekebilir.

Sürekli İzleme için ResizeObserver

useLayoutEffect ile yapılan tek seferlik ölçüm, bağlanma anındaki boyutu verir. Öğe yeniden boyutlandırılırken boyut değişikliklerini (pencerenin yeniden boyutlandırılması, dinamik içerik veya CSS değişiklikleri nedeniyle) izlemek için bunun yerine ResizeObserver kullanın. Öğe boyutu her değiştiğinde bir geri çağırma çalıştırır; bu da onu duyarlı bileşenler için daha uygun hale getirir.

Gereksiz Ölçümlerden Kaçınma

Birden fazla etkinin aynı ölçüme ihtiyacı varsa ölçümü bir kez hesaplayıp bağlam aracılığıyla paylaşın veya özellik olarak aşağı aktarın. Aynı getBoundingClientRect() değerini birden fazla useLayoutEffect çağrısında hesaplamak, birden fazla eşzamanlı yerleşim okumasını tetikler ve bunların her biri görece maliyetlidir. Mümkün olduğunda ölçümleri birleştirin.

useLayoutEffect ile Referans Zamanlaması

Etkiler çalışmadan önce referanslar doldurulur. useLayoutEffect çalıştığında ref.current değerinin DOM öğesini göstermesi garanti edilir. Örüntünün işe yaramasının nedeni budur: useLayoutEffect(() => { const rect = ref.current.getBoundingClientRect(); ... }, []). Oluşturulmuş bir bileşenin yerleşim etkisi içinde referans hiçbir zaman null olmaz.

getBoundingClientRect Zamanlaması

getBoundingClientRect() çağrısını useEffect yerine useLayoutEffect içinde yapmak neden daha iyidir?

Ders Özeti: DOM Öğelerini Ölçme

DOM ölçümlerini değişikliklerden sonra, ancak ekrana çizimden önce okumak için getBoundingClientRect() değerini useLayoutEffect içinde kullanın. Bu ölçümlerden kaynaklanan durum güncellemeleri aynı çizime dahil edilen eşzamanlı bir yeniden oluşturmaya yol açarak titremeyi önler. SSR'ye karşı typeof window kontrolüyle koruma sağlayın. Sürekli boyut izleme için ResizeObserver'ı tercih edin.

Sıkça Sorulan Sorular

“useLayoutEffect ile DOM Ögelerini Ölçme” dersi ücretsiz mi?

Evet — “useLayoutEffect ile DOM Ögelerini Ölçme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve React Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. React Academy kursu toplamda 4 dersten oluşur.

“useLayoutEffect ile DOM Ögelerini Ölçme” dersinde ne öğreneceğim?

Titreşimi önlemek için düzen sonrasında, boyama öncesinde öge boyutlarını, konumlarını ve kaydırma uzaklıklarını okuyun React Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

React Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te React Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“useLayoutEffect ile DOM Ögelerini Ölçme” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu React Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her React Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Görüntüleme Aşaması ve DOM'ye İşleme
  2. useLayoutEffect ile useEffect Ne Zaman Çalışır
  3. useLayoutEffect ile DOM Ögelerini Ölçme
  4. Düzen Karmaşasını ve Görsel Titreşimi Önleme
← React Academy Sayfasına Dön