html'de data-reactid özniteliği nedir?


95

Bazı sayfaların HTML'sini incelerken, bazılarının bu "data-reactid" özelliğini aşağıdaki gibi kullandığını fark ettim:

 <a data-reactid="......" ></a>

Bu nitelik nedir ve işlevi nedir?


30
data-reactidReact JavaScript kitaplığı tarafından kullanılan özel niteliktir . Facebook ve Instagram ile kullanılmak üzere geliştirilmiştir.
amit

7
Lütfen tüm yanıtların özel tarih özelliklerinin ne olduğunu açıkladığını ve data-reactid'in ne olduğunu açıklamadığını unutmayın. React tarafından, react element sınıfı örneğiyle dom nesnesine başvurabilmek için kullanılır.
adrianj98

2
@ adrianj98, neden yorumunuzu cevap olarak göndermediniz?
Octopus

3
Merak ediyorum, Facebook React kullanıyorsa, neden sitelerinde herhangi bir veri tepkisi bulamıyorum?
PabloRosales

Yanıtlar:


133

data-reactidNitelik yüzden kullanılan özel bir niteliktir Tepki benzersiz DOM içindeki bileşenleri tespit edebilir.

Bu önemlidir, çünkü React uygulamaları hem sunucuda hem de istemcide oluşturulabilir. Dahili olarak React, uygulamanızı oluşturan DOM düğümlerine referansların bir temsilini oluşturur (basitleştirilmiş sürüm aşağıdadır).

{
  id: '.1oqi7occu80',
  node: DivRef,
  children: [
    {
      id: '.1oqi7occu80.0',
      node: SpanRef,
      children: [
        {
          id: '.1oqi7occu80.0.0',
          node: InputRef,
          children: []
        }
      ]
    }
  ]
}

Gerçek nesne referanslarını sunucu ve istemci arasında paylaşmanın bir yolu yoktur ve tüm bileşen ağacının serileştirilmiş bir sürümünü göndermek potansiyel olarak pahalıdır. Uygulama sunucuda işlendiğinde ve React istemcide yüklendiğinde, sahip olduğu tek veri data-reactidözniteliklerdir.

<div data-reactid='.loqi70ccu80'>
  <span data-reactid='.loqi70ccu80.0'>
    <input data-reactid='.loqi70ccu80.0' />
  </span>
</div>

Bunu yukarıdaki veri yapısına geri dönüştürebilmesi gerekiyor. Bunu yapmanın yolu, benzersiz data-reactidniteliklerle. Buna bileşen ağacının şişirilmesi denir .

Ayrıca React istemci tarafında data-reactidişliyorsa, referanslarını kaybetmesi gerekmese bile özniteliği kullandığını fark edebilirsiniz. Bazı tarayıcılarda, uygulamanızı DOM'a ekler ve .innerHTMLardından performans artışı olarak bileşen ağacını hemen şişirir.

Diğer ilginç fark, istemci tarafında oluşturulan React kimliklerinin artımlı bir tam sayı formatına (benzer .0.1.4.3) sahip olması, sunucu tarafından oluşturulanların önüne rastgele bir dizge (örneğin .loqi70ccu80.1.4.3) eklenmesidir . Bunun nedeni, uygulamanın birden çok sunucuda işlenebilmesidir ve çarpışma olmaması önemlidir. İstemci tarafında, yalnızca bir işleme süreci vardır, bu da sayaçların benzersiz kimlikler sağlamak için kullanılabileceği anlamına gelir.

document.createElementBunun yerine React 15 kullanır , bu nedenle istemci tarafından oluşturulan işaretleme artık bu özellikleri içermeyecektir.


3
Soruyu cevaplayan tek cevap olduğu için bu kabul edilen cevap olmalıdır.
John


2
React v15 + için:> data-reactid sunucu tarafından oluşturulan içerik için hala mevcuttur, ancak öncekinden çok daha küçüktür ve basitçe otomatik artan bir sayaçtır.
RationalDev GoFundMonica'yı seviyor

1
@RationalDev Ah, bu ilginç. Uygulama birden fazla sunucuda işlenirse, çarpışma sorununu nasıl çözebilirim?
Dan Prince

1
O son bölümü arıyordum, bunu eklediğin için teşekkürler. İstemci işaretlememin neden daha önce olduğu gibi içermediğini kafam karıştı, ancak uygulamamın başka bir bölümünde vardı (sunucuda oluşturuldu).
jacoballenwood


11

HTML5'te Özel Veri özelliği

Cevabımda Ian'ın yorumundan alıntı yapmak isterim:

Bu, onunla ilgili verileri / bilgileri depolamak için kullanabileceğiniz öğenin yalnızca bir özniteliğidir (geçerli bir öznitelik).

Bu kod daha sonra onu olay işleyicisinde alır ve hedef çıktı öğesini bulmak için kullanır. Metninin çıktısının alınması gereken div sınıfını etkin bir şekilde depolar.

reactidSadece bir soneklerdir sen mesela burada herhangi bir ad olabilir: data-Ayman.

Farkı bulmak istiyorsanız, bu SO cevabındaki ve yorumdaki kemanları kontrol edin .


8
Sağladığınız bağlantıya göre öznitelik adında büyük harf kullanamayacağınızı unutmayın.
Lez

1
Evet, bu kısıtlama biraz yanıltıcı. DOM'un kendisindeki gerçek öznitelik adı büyük harflere sahip olamaz, ancak HTML etiketine yazılan öznitelik bunu yapabilir, çünkü tüm etiket ve öznitelik adları zaten okundukça otomatik olarak küçük harfle yazılır. Yani HTML'de büyük harf kullanabilirsiniz, ancak JS'de hepsi küçük harf olacaktır. w3.org/TR/2010/WD-html5-20101019/…
Peeja

3

veri öznitelikleri genellikle çeşitli etkileşimler için kullanılır. Genellikle javascript aracılığıyla. Site davranışıyla ilgili hiçbir şeyi etkilemezler ve ihtiyaç duyulan herhangi bir amaç için verileri iletmek için uygun bir yöntem olarak dururlar. İşte işleri açıklığa kavuşturabilecek bir makale:

http://ejohn.org/blog/html-5-data-attributes/

data-Herhangi bir standart öznitelik güvenli dizesinin önüne ekleyerek bir veri özniteliği oluşturabilirsiniz (boşluk veya özel karakter içermeyen alfasayısal). Örneğin data-idveya bu durumdadata-reactid


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.