2015-11-21 11 views
64

मैं एक बच्चे के घटक के लिए 2 मान पास:प्रतिक्रिया onClick समारोह आग पर प्रस्तुत करना

  1. वस्तुओं की सूची
  2. हटाने समारोह प्रदर्शित करने के लिए।

मैं वस्तुओं की सूची को प्रदर्शित करने के लिए (में दिए गए उदाहरण की तरह ट्यूटोरियल पेज प्रतिक्रिया) (में एक .map() फ़ंक्शन का उपयोग करें, लेकिन यह है कि घटक में बटन onClick समारोह आग, प्रस्तुत करना पर गोली नहीं करना चाहिए समय प्रस्तुत करने पर)। मेरे कोड इस तरह दिखता है:

module.exports = React.createClass({ 
    render: function(){ 
     var taskNodes = this.props.todoTasks.map(function(todo){ 
      return (
       <div> 
        {todo.task} 
        <button type="submit" onClick={this.props.removeTaskFunction(todo)}>Submit</button> 
       </div> 
      ); 
     }, this); 
     return (
      <div className="todo-task-list"> 
       {taskNodes} 
      </div> 
     ); 
    } 
}); 

मेरा प्रश्न है: क्यों करता है मेरा प्रस्तुत करना पर समारोह आग onclick और कैसे यह नहीं करने के लिए बनाने के लिए।

उत्तर

195

क्योंकि आपको लगता है कि समारोह बुला रहे हैं के बजाय onClick को समारोह गुजर, इस लिए कि लाइन बदलने के लिए:

<button type="submit" onClick={() => { this.props.removeTaskFunction(todo) }}>Submit</button> 

=> तीर समारोह है, जो ES6 में पेश किया गया था, और पर समर्थन किया जाएगा बुलाया 0.13.3 या ऊपरी प्रतिक्रिया दें।

+3

ग्रेट ट्रिगर करेगा! मैं इस जवाब को स्वीकार कर रहा हूं, क्योंकि कोड मेरे कोडिंग स्टाइल फिट बैठता है। – Stralos

+0

मुझे पता है कि मैंने आपका जवाब स्वीकार कर लिया है (और यह काम करता है!) लेकिन मैंने अपने कोड में एक और जगह की जांच की, जहां एक इनपुट फ़ील्ड के लिए एक फ़ंक्शन पास करता है जैसा मैंने यहां किया था, और यह बिना() => के ठीक काम करता था। क्यूं कर ? – Stralos

+0

@Stralos क्या आप मुझे अपना कोड दिखा सकते हैं? –

17

इसके बजाय फ़ंक्शन को कॉल की, कार्य करने के लिए मूल्य के लिए बाध्य:

this.props.removeTaskFunction.bind(this, todo) 

MDN रेफरी: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_objects/Function/bind

+0

अच्छा, अच्छा जवाब, लेकिन मैंने एक और जवाब के साथ जाने का फैसला किया, क्योंकि यह मुझे और फिट बैठता है :)। अभी भी आपको – Stralos

+1

आईएमएचओ और कई अन्य धन्यवाद। आपको क्लैसिस या बाइंडिंग पर स्टेटलेस फ़ंक्शंस का पक्ष लेना चाहिए क्योंकि इससे आपको अवांछित साइड इफेक्ट्स मिल सकते हैं। इसलिए, दोनों उत्तरों भी सही होने के नाते, मुझे विश्वास है कि एक दूसरे की तुलना में अधिक अपरिपक्व है। – sospedra

8

मूल्य अपने onClick विशेषता के लिए एक समारोह, नहीं एक समारोह कॉल किया जाना चाहिए।

<button type="submit" onClick={function(){removeTaskFunction(todo)}}>Submit</button> 
+1

रेंडर के अंदर इवेंट कॉल पर अनाम फ़ंक्शंस का उपयोग न करें - यह एक और रेंडर – Splynx

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