2015-11-29 3 views
15

मैंने एक साइन इन पेज लागू किया जो तब तक काम करता था जब तक मैंने प्रतिक्रिया-मूल को अपग्रेड नहीं किया।टच करने योग्य हाइलाइट ऑनप्रेस काम नहीं कर रहा

समस्या मैं आ रही हैं कि onPress प्रोप नहीं बुलाया जा रहा है:

<TouchableHighlight style={styles.button} 
     underlayColor='#f1c40f' 
     onPress={this.signIn}> 
    <Text style={styles.buttonText}>Sign In</Text> 
</TouchableHighlight> 

यहाँ मेरी साइन-इन समारोह है:

signIn: function(){ 
console.log("SignInAction signIn") 
this.fetchData(); }, 

साइन-इन बटन उदास प्रतीत होता है जब मैं इसे क्लिक करें लेकिन लॉग स्टेटमेंट फायरिंग नहीं है।

उत्तर

30

इस तरह यह कॉल करके देखें:

onPress={() => this.signIn() }> 

ऐसा लगता है कि "इस" अपने कार्य में गलत गुंजाइश के लिए बाध्य है।

+1

मुझे यह दृष्टिकोण पसंद है। ध्यान दें, मेरे कोड में यह.signIn बिना() है। यह तीर समारोह के बिना भी काम करता है। – lernerbot

+0

मुझे एक ही समस्या थी: जब सूची स्क्रॉल की गई थी तो मेरी ऑनप्रेस को स्क्रॉल सूची के अंदर स्वचालित रूप से कॉल किया गया था। तीर समारोह को जोड़ना इसे ठीक कर दिया! –

+0

आप मेरी जान बचाओ। और यह साइन-इन से बचने के लिए शॉर्टेंड फ़ंक्शन का उपयोग करने के लिए शानदार है। अच्छा! –

5

आप भी इसे इस तरह कर सकते हैं:

onPress={this.signIn.bind(this)}> 

कोड के बाकी परिवर्तन की जरूरत नहीं है।

2

इसके अलावा, आप बाँध चाहते उपयोग नहीं करते हैं और हम ES6 वाक्य रचना का उपयोग कर रहे के बाद से, आप बाहर एक स्थिरांक (अपने घटक के अंदर) के रूप में नियुक्त अपने समारोह लिख सकता है बल्कि एक समारोह जैसे की तुलना में:

signIn =() => { 
    // code here 
} 

तो आप अब भी यह घटक आप पहले से ही कर रहे हैं की तरह भीतर निर्माता या कहीं और के भीतर बाध्य करने के लिए बिना कॉल कर सकते हैं:

<TouchableHighlight style={styles.button} 
     underlayColor='#f1c40f' 
     onPress={this.signIn}> 
    <Text style={styles.buttonText}>Sign In</Text> 
</TouchableHighlight> 

इस के बाद से साइन-इन की "इस" लगातार संदर्भ रखना चाहिए के लिए बाध्य होंगे अंग शुरुआत में केवल एक बार।

+0

बीटीडब्ल्यू सभी तीन विधियां मान्य हैं। वरीयता का मामला लगता है। –

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