2017-04-16 93 views
5

componentDidUpdate yöntem etmektir üzerine benBir öğenin tepki kökü dom düğümünü almak için ref veya findDOMNode kullanmalı mıyım?

Şu anda ne yapıyorum (render DOM düğümün üst, alt ve boyut özelliklerini) bazı dom-düğüm boyutu hesaplamaları yapmak istediğiniz bir durumla ilgili değilim Bu iyi çalışıyor

componentDidUpdate() { 
     var node = ReactDOM.findDOMNode(this); 

     this.elementBox = node.getBoundingClientRect(); 
     this.elementHeight = node.clientHeight; 
     // Make calculations and stuff 
} 

ama performansı hakkında biraz endişeliyim ve en iyi uygulamaları tepki: Bu konuda findDOMNode diyoruz. Birkaç yerde findDOMNode yerine ref özelliğini kullanma hakkında konuşur, ama hepsi çocuk dom öğeleri için, benim durumumda sadece benim bileşenimin kök DOM düğümü istiyorum. Bu gibi görünebilir ref kullanarak

alternatif:

render(){ 
    return (
      <section // container 
       ref={(n) => this.node = n}> 
       // Stuff 
      </section> 
} 
componentDidUpdate() { 

     this.elementBox = this.node.getBoundingClientRect(); 
     this.elementHeight = this.node.clientHeight; 
     // Make calculations and stuff 
} 

sadece bana doğru gelmiyor referans var olsun benim kök dom düğümüne bir ref geri arama takılarak, dürüst olmak gerekirse.

Bu vakada en iyi uygulama hangisiydi? Hangisi daha iyi bir performansa sahip?

cevap

1

Dokümana başvurursam (https://facebook.github.io/react/docs/react-dom.html#finddomnode), findDOMNode gerçek bir seçenek olmaktan çok bir numara gibi görünüyor. Ref en iyi seçenek olarak görünüyor. doc, burada verdiğiniz taslağı uygular (ref={(n) => this.node = n} ile)

+1

Yeni bulduğum belgeleri tekrar okuma:> Sınıfta bir özellik belirlemek için sadece geri arama özelliğini kullanmak DOM öğelerine erişim için yaygın bir kalıptır. Tercih edilen yol, yukarıdaki örnekte olduğu gibi geri aramada özelliği ayarlamaktır. – Danielo515

+0

Bu arada, fark ettiniz mi bilmiyorum, ama JS Standardı '{(n) => this.node = n}' hakkında "Ok işlevi atamayı geri göndermemeliyiz" konusunda şikayetçiyim. Merak ediyorum, bu yasal şikayet ya da değil – revelt