2016-02-03 14 views
6

मैं प्रतिक्रिया में एक div की चौड़ाई और ऊंचाई शैलियों तक पहुंचने का प्रयास कर रहा हूं लेकिन मैं एक समस्या में भाग रहा हूं। यह मैं अब तक क्या मिला है:प्रतिक्रिया से शैलियों तक कैसे पहुंचे?

componentDidMount() { 
    console.log(this.refs.container.style);  
} 


render() { 
    return (
     <div ref={"container"} className={"container"}></div> //set reff 
    ); 
} 

यह काम करता है लेकिन उत्पादन है कि मैं पाने के एक CSSStyleDeclaration वस्तु है और सभी संपत्ति में मैं यह कर सकते हैं कि वस्तु के लिए सभी CSS चयनकर्ताओं पर वे उनमें से कोई भी सेट कर रहे हैं। वे सभी एक खाली स्ट्रिंग पर सेट हैं।

यह CSSStyleDecleration के उत्पादन में है: http://pastebin.com/wXRPxz5p

वास्तविक शैलियों (घटना inherrited वाले) को देखने के लिए हो रही है पर कोई मदद बहुत सराहना की जाएगी!

धन्यवाद!

+1

कोशिश उपयोग करने के लिए 'window.getComputedStyle (this.refs.container)' बजाय –

+0

OMG हाँ !! यह पूरी तरह से काम किया ... क्या यह आमतौर पर इस्तेमाल किया जाता है? क्योंकि मैंने इसे कभी भी डॉक्स संपादित करने से पहले कभी नहीं देखा है: क्या आप कृपया उत्तर दे सकते हैं ताकि मैं इसे स्वीकार कर सकूं 8) – mre12345

+0

यह प्रतिक्रिया कार्य नहीं है, और यह संभव है कि पुराने आईई (<= 8) में काम न करें । @ विक्रमादित्य ने बेहतर समाधान की पेशकश की। –

उत्तर

12

इस

console.log(ReactDOM.findDOMNode(this.refs.container).style); //React v > 0.14.1 

console.log(React.findDOMNode(this.refs.container).style);//React v <= 0.13.3 

संपादित कर सकता हूं:

विशिष्ट शैली मूल्य

console.log(window.getComputedStyle(React.findDOMNode(this.refs.container)).getPropertyValue("border-radius"));// border-radius can be replaced with any other style attributes; 
+0

'React.findDOMNode' है [बहिष्कृत] (https://github.com/yannickcr/eslint-plugin-react/issues/678)? –

+0

हां, 'React.findDOMNode' 0.13.3 प्रतिक्रिया तक वहां था। अब सभी डीओएम संबंधित संचालन के लिए 'ReactDOM' का उपयोग करें। – Vikramaditya

+0

मुझे लगता है कि डैन अब्रामोव क्या कह रहा है [गिटब मुद्दा जो मैंने लिंक किया है] (https://github.com/yannickcr/eslint-plugin-react/issues/678) यह है कि विधि को हटा दिया जाएगा, भले ही 'प्रतिक्रिया' .findDOMNode' या 'ReactDOM.findDOMNode'। [ReactDOM.findDOMNode'] पर प्रलेखन से (https://facebook.github.io/react/docs/react-dom.html#finddomnode): "findDOMNode अंतर्निहित डोम नोड तक पहुंचने के लिए उपयोग किया जाने वाला एक एस्केप हैच है। ज्यादातर मामलों में, इस एस्केप हैच का उपयोग निराश होता है क्योंकि यह घटक अबास्ट्रक्शन को तोड़ देता है। " दान इसके बजाय 'रेफरी' का उपयोग करने की सिफारिश करता है। –

2

हो रही आप से ReactDOM.findDOMNode विधि और काम का उपयोग करना चाहिए के लिए। यहां वह कोड है जो आपको चाहिए।

var Hello = React.createClass({ 

componentDidMount: function() { 
    var elem = ReactDOM.findDOMNode(this.refs.container); 
    console.log(elem.offsetWidth, elem.offsetHeight);  
}, 

render: function() { 
    return (
     <div ref={"container"} className={"container"}> 
     Hello world 
     </div> 
    ); 
} 
}); 

ReactDOM.render(
    <Hello name="World" />, 
    document.getElementById('container') 
); 

jsFiddle

0

आप पहले से ही शैली मिलता है, कारण है कि CSSStyleDeclaration वस्तु के रंगमंच की सामग्री इतना रिक्त स्ट्रिंग मान होना यह भीतरी शैली के लिए लिंक है।

देखें क्या होगा अगर तुम नीचे की तरह परिवर्तन करना:

<div ref={"container"} className={"container"} style={{ width: 100 }}></div>

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