2017-04-16 25 views
5

मैं एक स्थिति है जहाँ मैं कुछ डोम नोड आकार गणना (ऊपर, नीचे और आकार गुण गाया डोम नोड के)क्या मुझे किसी तत्व के प्रतिक्रिया रूट डोम नोड प्राप्त करने के लिए रेफरी या findDOMNode का उपयोग करना चाहिए?

क्या मैं अभी कर रहा हूँ बनाना चाहते पर हूँ पर componentDidUpdate विधि करने के लिए है इस पर findDOMNode फोन:

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

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

यह ठीक काम कर रहा है, लेकिन मैं प्रदर्शन के बारे में थोड़ा चिंतित हूँ, और सर्वोत्तम प्रथाओं प्रतिक्रिया होती है। कई स्थानों को खोजने के बजाय ref संपत्ति का उपयोग करने के बारे में बात करते हैं, लेकिन वे सभी बच्चे के डोम तत्वों के लिए हैं, मेरे मामले में मैं केवल अपने घटक के रूट डीओएम नोड चाहता हूं।

रेफरी का उपयोग कर कुछ ऐसा दिखाई देगा विकल्प:

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 
} 

ईमानदारी से कहूं तो मेरी जड़ डोम नोड के लिए एक रेफरी कॉलबैक संलग्न बस इसे संदर्भ मेरे लिए सही महसूस नहीं करता है पाने के लिए।

इस मामले पर सबसे अच्छा अभ्यास क्या माना जाता है? किसके पास बेहतर प्रदर्शन है?

उत्तर

1

यदि मैं दस्तावेज़ (https://facebook.github.io/react/docs/react-dom.html#finddomnode) का संदर्भ देता हूं, findDOMNode वास्तविक विकल्प की तुलना में अधिक चाल है। रेफरी सबसे अच्छा विकल्प प्रतीत होता है। doc आपके द्वारा दिए गए एक ही ड्राफ्ट को लागू करता है (ref={(n) => this.node = n} के साथ)

+1

फिर से प्रलेखन को पढ़ना मैंने अभी पाया:> कक्षा पर एक संपत्ति सेट करने के लिए रेफ कॉलबैक का उपयोग करना डीओएम तत्वों तक पहुंचने के लिए एक आम पैटर्न है। पसंदीदा तरीका है कि उपर्युक्त उदाहरण में संपत्ति को रेफ कॉलबैक में सेट करना है। – Danielo515

+0

वैसे, मुझे नहीं पता कि आपने देखा है, लेकिन जेएस मानक मैं शिकायत पर हूं {{n) => this.node = n} 'कह रहा है "तीर फ़ंक्शन असाइनमेंट वापस नहीं करना चाहिए।" मुझे आश्चर्य है कि यह कानूनी शिकायत है या नहीं – revelt

संबंधित मुद्दे

 संबंधित मुद्दे