एक प्रतिक्रिया समारोह क्यों बांधें?
जब आप ईएस 6 कक्षा का उपयोग कर एक घटक को परिभाषित करते हैं, तो एक ईवेंट पैटर्न एक ईवेंट हैंडलर कक्षा पर एक विधि होने के लिए होता है। जावास्क्रिप्ट में, क्लास विधियों को डिफ़ॉल्ट रूप से बाध्य नहीं किया जाता है। यदि आप bind this.someEventHandler
को भूल जाते हैं और इसे onChange
पर पास करते हैं, तो यह फ़ंक्शन वास्तव में कहलाए जाने पर अपरिभाषित होगा।
आम तौर पर, यदि आप ()
के बिना onChange={this.someEventHandler}
के बिना किसी विधि को संदर्भित करते हैं, तो आपको उस विधि को बांधना चाहिए।
वहाँ
सही संदर्भ
पहले
return <input onChange={this.someEventHandler.bind(this)}>
इस एक हम bind
स्पष्ट के उपयोग onChange घटना एक तर्क के रूप उपलब्ध बनाने के लिए कार्य करने के लिए बनाने के अलावा करने के लिए अपने onChange
समारोह बाध्य करने के लिए तीन तरीके घटना के लिए हैंडलर। हम यह भी तरह
return <input onChange={this.someEventHandler.bind(this, state.value)}>
दूसरा
return <input onChange={(event) => { this.someEventHandler(event) }>
यह एक ES6 वाक्य रचना है, जिसके तहत हम मापदंडों कि हम someEventHandler
समारोह को पास करना चाहते specifythe सकते वाक्य रचना के प्रकार के साथ कुछ अन्य पैरामीटर भेज सकते हैं। हालांकि यह .bind(this)
के बराबर है, यह भी हमारे जैसे घटना के साथ-साथ अन्य विशेषताओं भेजने के लिए लचीलापन प्रदान करता है
return <input onChange={(event, value) => { this.someEventHandler(event, value) }>
तीसरा
तीर समारोह
someEventHandler =() => {
console.log(this); // now this refers to context of React component
}
का उपयोग कर समारोह someEventHandler को परिभाषित करें एक arrow function
का अपना this
नहीं है, this
संलग्न निष्पादन संदर्भ के मान का उपयोग किया जाता है और इसलिए उपर्युक्त कार्य सही संदर्भ प्राप्त करता है।
निर्माता में
या यह बाँध तरह
constructor(props) {
super(props);
this.someEventHandler = this.someEventHandler.bind(this);
}
return <input onChange={this.someEventHandler}>
इस विधि में, घटना सीधे someEventHandler
समारोह से जुड़ी है। कोई अन्य मापदंडों इस तरह
पढ़ने का सुझाव दिया http://blog.andrewray.me/react-es6-autobinding-and-createclass/ –
क्या आप जानते हैं कि '.ind' क्या करता है और यह कैसे काम करता है? –
भी [प्रस्तावित बाइंड ऑपरेटर ':: '] (https://github.com/tc39/proposal-bind-operator) भी है। इस तरह प्रयोग करें: 'वापसी <इनपुट ऑन चेंज = {:: this.someEventHandler} /> ', [उचित बेबेल ट्रांसफॉर्म] के साथ (https://babeljs.io/docs/plugins/transform-function-bind/)। – neezer