2015-03-17 12 views
20

मैं सरणी में ऑब्जेक्ट्स के लिए इनपुट तत्वों का संग्रह प्रस्तुत करता हूं।इनपुट के लिए एकाधिक पैरामीटर कैसे पास करें हैंडलर

changeRangeName: function (event) { 
    var newName = event.target.value; 
}, 

लेकिन इस हैंडलर में मैं सीमा वस्तु मैं बदलना चाहते हैं की आईडी की जरूरत है:

render: function() { 
    var ranges = []; 
    this.props.ranges.map(function(range, index) { 
     var rangeElement = <Input type="text" 
      value={range.name} onChange={this.changeRangeName.bind(this)} /> 
     ranges.push(rangeElement); 
    }, this); 

    // render ranges 
} 

यह मेरे onChange हैंडलर समारोह लिखने के लिए अनुमति देता है। तो मैं परिवर्तन को बदल सकता है कि कैसे मैं समारोह और परिवर्तन प्रस्तुत करना में इनपुट तत्वों को बनाने:

var rangeElement = <Input type="text" 
      value={range.name} 
      onChange={this.changeRangeName.bind(this, range.id)} /> 

अब मेरी हैंडलर पैरामीटर के रूप में range.id प्राप्त होगा लेकिन अब मैं NewName मूल्य नहीं है। मैं इसे रेफर्स

var rangeElement = <Input type="text" 
      ref={'range' + range.id} 
      value={range.name} 
      onChange={this.changeRangeName.bind(this, range.id)} /> 

यह एकमात्र समाधान है जिसे मैं जानता हूं लेकिन मुझे संदेह है कि बेहतर है।

+0

मैं बस सोच रहा हूं, एक संपत्ति के भीतर रिएक्ट में विरोधी पैटर्न नहीं है? – user2891491

उत्तर

28

event तर्क अभी भी पारित कर दिया है, लेकिन rangeId तर्क तर्क सूची के लिए prepended है, इसलिए आपका changeRangeName विधि

changeRangeName: function (rangeId, event) { 
    var newName = event.target.value; 
}, 

कैसा दिखेगा देखें Function.prototype.bind()

+0

अब जब मैं प्रलेखन पढ़ता हूं तो मैं इसे देखता हूं :) धन्यवाद। –

+0

आपने मेरा दिन बचाया! – Jules

26

मुझे लगता है कि इस तरह से आसान है:

<Input type="text" 
       value={range.name} 
       onChange={(e) => this.changeRangeName(range.id, e)} 
     ... 
    onChange(id, e) { 
     ... 
    } 
+0

धन्यवाद, मुझे इसे इस तरह से करना पसंद आया 1) मेरा बाध्यकारी कन्स्ट्रक्टर में था 2) यह अधिक पठनीय है। – runios

+0

मैं मानता हूं कि यह बहुत पठनीय है। लेकिन यह कार्यान्वयन ब्राउज़र में एक चेतावनी देता है: "एक घटक नियंत्रित करने के लिए प्रकार के पाठ के अनियंत्रित इनपुट को बदल रहा है। इनपुट तत्वों को अनियंत्रित से नियंत्रित (या इसके विपरीत) से स्विच नहीं करना चाहिए। नियंत्रित या अनियंत्रित इनपुट तत्व का उपयोग करने के बीच निर्णय लें घटक के जीवनकाल के लिए। " इस चेतावनी से बचने के तरीके पर कोई विचार? –

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