2016-09-05 18 views
11

प्रतिक्रिया में मैं एक मेज पर एक onScroll घटना जोड़ने के लिए कोशिश कर रहा हूँ। यह मैं क्या कोशिश की है है:कैसे स्क्रॉल घटना जोड़ने के लिए घटक

componentDidMount() { 
    ReactDOM.findDOMNode(this.refs.table).addEventListener('scroll', this.listenScrollEvent); 
} 

componentWillUnmount() { 
    ReactDOM.findDOMNode(this.refs.table).removeEventListener('scroll', this.listenScrollEvent); 
} 

listenScrollEvent() { 
    console.log('Scroll event detected!'); 
} 

render() { 
    return (
     <table ref="table"> 
      [...] 
     </table> 
    ) 
} 

मैं console.log(ReactDOM.findDOMNode(this.refs.table)) की कोशिश की और मैं सही परिणाम हो रही है लेकिन पुस्तक ईवेंट बिल्कुल भी निकाल दिया कभी नहीं है। मैंने here में देखा लेकिन अभी भी असफल रहा। किसी भी मदद की बहुत सराहना की जाएगी।

listenScrollEvent() { 
    console.log('Scroll event detected!'); 
} 

render() { 
    return (
     <table onScroll={this.listenScrollEvent}> 
      [...] 
     </table> 
    ) 
} 

यहाँ एक उदाहरण है:

+0

तालिका सामग्री तालिका सीमाओं बहती है? यह नहीं, यह स्क्रॉल नहीं करेगा। – Andreyco

+0

कंटेनर में 'ओवरफ़्लो: ऑटो' है जिसका अर्थ है कि तालिका एक फ्रेम के अंदर है (यदि मैं सही हूं)। मैं 'window.addEventListener' –

+0

का उपयोग नहीं करना चाहता हूं तालिका में 'प्रदर्शन: ब्लॉक'' जोड़ने का प्रयास करें। –

उत्तर

2

आप onScroll विशेषता का उपयोग कर सकते हैं https://jsfiddle.net/81Lujabv/

+0

काम नहीं करता :( –

+0

मैं 'onScroll' घटना एक तत्व पर डाल प्रतिक्रिया में सक्षम नहीं है, सोचा था कि मेरी उदाहरण में –

+0

देखो o_0: https://jsfiddle.net/81Lujabv/ यह यहाँ करने के लिए सबसे अच्छा तरीका है –

6

आप संदर्भ में तत्व को यह बाध्य करने के लिए की जरूरत है।

render() { 
    return (
     <table ref="table" onScroll={this.listenScrollEvent.bind(this)}> 
      [...] 
     </table> 
    ) 
} 
+3

यदि आप घटक बनाने के लिए ES6 क्लास का उपयोग करते हैं। –

+0

मैंने पहले से ही कन्स्ट्रक्टर पर किया है लेकिन अभी भी काम नहीं करता है। 'कन्स्ट्रक्टर (प्रोप) {सुपर (प्रोप); this.listenScrollEvent = this.listenScrollEvent .bind (this);} ' –

+0

हालांकि यह आम तौर पर उपयोगी होता है, ध्यान दें कि मूल प्रश्न में 'listenScrollEvent' विधि' इस के साथ कुछ भी नहीं करती है ओ बाध्यकारी यह वास्तव में अनावश्यक है। – Jules

-1

इस आज़मा कर देखें, this.listenScrollEvent को .bind(this) जोड़ा जब आप इसे addEventListener लिए गुजरती हैं।

componentDidMount() { 
     ReactDOM.findDOMNode(this.refs.table).addEventListener('scroll', this.listenScrollEvent.bind(this)); 
    } 

    componentWillUnmount() { 
     ReactDOM.findDOMNode(this.refs.table).removeEventListener('scroll', this.listenScrollEvent.bind(this)); 
    } 

    listenScrollEvent() { 
     console.log('Scroll event detected!'); 
    } 

    render() { 
     return (
      <table ref="table"> 
       [...] 
      </table> 
     ) 
    } 
संबंधित मुद्दे