useRef
Referans
useRef(initialValue)
Bir tanımlamak için useRef
’i bileşeninizin en üst seviyesinde çağırın.
Parametreler
initialValue
: Ref nesnesinincurrent
özelliğinin başlangıçta olmasını istediğiniz değer. Herhangi türde bir değer olabilir. Bu argüman, ilk render işleminden sonra göz ardı edilir.
Geri Dönüş Değeri
useRef
, tek bir özelliğe sahip bir nesne döndürür:
current
: Başlangıçta, verdiğinizinitialValue
değerine ayarlanır. Daha sonra başka bir şeye ayarlayabilirsiniz. Eğer ref nesnesini bir JSX elemanınaref
özelliği olarak verirseniz, Reactcurrent
özelliğini tanımlayacaktır.
Sonraki render işlemlerinde, useRef
aynı nesneyi döndürecektir.
Dikkat edilmesi gerekenler
ref.current
özelliğini değiştirebilirsiniz. State’in aksine, bu değiştirilebilirdir. Ancak, render için kullanılan bir nesne tutuyorsa (örneğin, State’inizin bir parçası), o nesneyi değiştirmemelisiniz.ref.current
özelliğini değiştirdiğinizde, React bileşeninizi yeniden render etmez. Ref, düz JavaScript bir nesne olduğundan, ne zaman değiştirdiğinizi React fark etmez.- Bileşeninizin davranışını öngörülemez hale getireceğinden render işlemi sırasında,
ref.current
’e yazmayın veya okumayın. Ancak yapabilirsiniz. - Strict Mode’da, React bileşeninizi iki kez çağıracaktır. Bu sadece geliştirme ortamı için geçerli bir davranıştır ve canlı ortamı etkilemez. Her bir ref nesnesi iki kez oluşturulacak, ancak bunlardan biri atılacaktır. Eğer bileşen fonksiyonunuz saf ise (olması gerektiği gibi), bu, davranışı etkilememelidir
Kullanım
Ref ile bir değeri referans gösterme
Bir veya daha fazla tanımlamak için bileşeninizin en üstünde useRef
’i çağırın.
useRef
başlangıçta verdiğiniz başlangıç değeri tanımlanmış bir şekilde sadece current
özelliğine sahip bir ref nesnesi döndürür.
Sonraki render işlemlerinde, useRef
aynı nesneyi döndürecektir. current
özelliğini değiştirerek bilgi saklayabilir ve daha sonra okuyabilirsiniz. Bu size özelliğini hatırlatabilir, ancak önemli bir fark var.
Bir ref’i değiştirmek yeniden render işlemine neden olmaz. Bu, ref’lerin bileşeninizin görsel çıktısını etkilemeyen bilgileri saklamak için mükemmel olduğu anlamına gelir. Örneğin, bir saklamak ve daha sonra geri almak istiyorsanız, bunu bir ref içine koyabilirsiniz. Ref içindeki değeri güncellemek için, current
özelliğini manuel olarak değiştirmeniz gerekir:
Daha sonra, ref’ten o interval ID’yi okuyarak :
Bir ref kullanarak şunları sağlarsınız:
- Yeniden render işlemleri arasında bilgi saklayabilirsiniz (her render işleminde sıfırlanan değişkenlerin aksine).
- Değiştirmek yeniden render işlemine neden olmaz (yeniden render işlemine neden olan state değişkenlerinin aksine).
- Bilgi, bileşeninizin her kopyasına özgüdür (paylaşılan dış değişkenlerin aksine).
Bir ref’i değiştirmek yeniden render işlemine neden olmaz, bu nedenle ekranda görüntülemek istediğiniz bilgileri saklamak için ref’ler uygun değildir. Bunun yerine state kullanın. daha fazla bilgi edinin.
Bir ref ile DOM’u manipüle etmek
Bir ref’i üzerinde değişiklik yapmak için kullanmak oldukça yaygındır. React’ın bunun için yerleşik desteği vardır.
İlk olarak, null
başlangıç değeri olan bir ref nesnesi tanımlayın:
Ref nesnenizi, manipüle etmek istediğiniz DOM elemanının JSX’ine ref
özelliği olarak verin:
React, DOM elemanını oluşturduktan ve ekrana koyduktan sonra, ref nesnenizin current
özelliğini o DOM elemanına tanımlar. Şimdi <input>
’un DOM elamanına erişebilir ve gibi yöntemleri çağırabilirsiniz:
Eleman ekrandan kaldırıldığında, React current
özelliğini null
olarak geri tanımlar.
hakkında daha fazla bilgi edinin.
Ref içeriğini yeniden oluşturmayı önleme
React, başlangıçtaki ref değerini bir kez kaydeder ve sonraki render işlemlerinde bunu dikkate almaz.
new VideoPlayer()
sonucu sadece başlangıç render işleminde kullanılmasına rağmen, bu işlemi her render işleminde çağırıyorsunuz. Bu, eğer pahalı nesneler oluşturuyorsa israf olabilir.
Bunu çözmek için ref’i şu şekilde başlatabilirsiniz:
Normalde, render sırasında ref.current
yazmaya veya okumaya izin verilmez. Ancak bu senaryoda sorun yoktur çünkü sonuç her zaman aynıdır ve koşul sadece başlatma sırasında çalışır, bu nedenle tamamen öngörülebilirdir.
Derinlemesine İnceleme
useRef’i daha sonra başlatırken null kontrollerinden nasıl kaçınılır
useRef’i daha sonra başlatırken null kontrollerinden nasıl kaçınılır
Bir tip denetleyici kullanıyorsanız ve her zaman null
kontrol etmek istemiyorsanız, bunun yerine şu şekilde bir model deneyebilirsiniz:
Burada playerRef
kendisi boş olabilir. Ancak, getPlayer()
’in null
döndüren bir durum olmadığını tip denetleyicinize ikna etmelisiniz. Ardından, olay yöneticisinde getPlayer()
kullanın.
Sorun Giderme
Özel bir bileşeni ref alamıyorum
Bileşeninize şu şekilde bir ref
vermeyi denerseniz:
Konsolda bir hata alabilirsiniz:
Varsayılan olarak, kendi bileşenleriniz içlerindeki DOM elemanlarında ref’leri açığa çıkarmaz.
Bunu düzeltmek için, bir ref almak istediğiniz bileşeni bulun:
Ve ardından ref
’i, bileşeninizin kabul ettiği props listesine ekleyin ve ref
’i ilgili prop olarak iletin, şöyle:
Böylece ana bileşen ona bir ref alabilir.
hakkında daha fazla bilgi edinin.