2015-06-08 8 views
5

JsFiddle: https://jsfiddle.net/69z2wepo/9956/प्रतिक्रिया का चयन onChange काम नहीं कर रहा

मैं अपने react.js कोड में समारोह प्रस्तुत करना में एक का चयन तत्व लौट रहा हूँ।

लेकिन जब भी मैं select मान बदलता हूं, onChange में फ़ंक्शन ट्रिगर नहीं हो रहा है।

var Hello = React.createClass({ 
render: function() { 
    return <select id="data-type" onChange={changeDataType()}> 
      <option selected="selected" value="user" data-type="enum">User</option> 
      <option value="HQ center" data-type="text">HQ Center</option> 
      <option value="business unit" data-type="boolean">Business Unit</option> 
      <option value="note" data-type="date">Try on </option> 
      <option value="con" data-type="number">Con</option> 
     </select> 
    } 
}); 


React.render(<Hello/>, document.getElementById('container')); 

function changeDataType() { 
    console.log("entered"); 
} 

यह फ़ंक्शन केवल एक बार शुरू हो रहा हो रही है जब चयन भरी हुई है और बाद में जब मैं मान बदलने, अपने शुरू हो रही नहीं।

उत्तर

11

onChange एक फ़ंक्शन लेता है।

आप इसे changeDataType() पास कर रहे हैं, जो फ़ंक्शन changeDataType फ़ंक्शन चला रहा है, और onChange को इसके वापसी मूल्य पर सेट कर रहा है, जो शून्य है।

फ़ंक्शन का मूल्यांकन करने के बजाय वास्तविक फ़ंक्शन को पार करने का प्रयास करें।

<select id="data-type" onChange={changeDataType}>

+3

कुछ भी है उस कोड में async? ऐसा लगता है कि इसे एक ईवेंट श्रोता के रूप में सेट करने के बाद 'changeDataType' को परिभाषित करना एक बुरा विचार है। शायद उस विधि को हैलो ऑब्जेक्ट (रेंडर विधि के बगल में) में ले जाना चाहिए और 'this.changeDataType' का उपयोग करना चाहिए। – pherris

+0

धन्यवाद यह काम किया। इसके अलावा, इसे रेंडर विधि के तहत ले जाया गया। विकल्प टैग के चयनित गुण का उपयोग करने के बजाय –

+0

। मूल्य को आसान बनाने के लिए आपको चयनित चुने गए मूल्य में चयनित मूल्य का उपयोग करना चाहिए। https://facebook.github.io/react/docs/forms.html#why-select-value –

5

कार्य पर ट्रिगर होने एक घटक परिवर्तन वास्तव में घटक के अंदर ही परिभाषित किया जाना चाहिए।

मैं बहुत की तरह अपने Hello घटक के अंदर अपने कार्य को परिभाषित करने, और अपने onChange विशेषता को this.changeDataType गुजर, सलाह देते हैं:

var Hello = React.createClass({ 
changeDataType: function() { 
    console.log('entered'); 
}, 
render: function() { 
    return <select id="data-type" onChange={this.changeDataType}> 
      <option selected="selected" value="user" data-type="enum">User</option> 
      <option value="HQ center" data-type="text">HQ Center</option> 
      <option value="business unit" data-type="boolean">Business Unit</option> 
      <option value="note" data-type="date">Try on </option> 
      <option value="con" data-type="number">Con</option> 
     </select> 
    } 
}); 

यहाँ एक अद्यतन JSFiddle कि आपके अपेक्षित व्यवहार का उत्पादन होता है: https://jsfiddle.net/69z2wepo/9958/

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