2015-11-29 18 views
15

Ho implementato una pagina di accesso che ha funzionato fino a quando non ho eseguito l'aggiornamento di react-native.TouchableHighlight onPress not working

Il problema che sto avendo è che il puntello onPress non viene chiamato:

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

Qui è la mia funzione signin:

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

Il pulsante signin sembra essere depresso quando ho fare clic ma l'istruzione del registro non viene attivata.

risposta

30

provare a chiamare in questo modo:

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

Sembra che il "presente" nella funzione è legata al campo di applicazione sbagliata.

+1

Mi piace questo approccio. Inoltre, il mio codice ha avuto questo.signIn senza il(). Funziona anche senza la funzione freccia. – lernerbot

+0

Ho avuto un problema simile: il mio onPress è stato chiamato automaticamente all'interno di una lista a scorrimento quando l'elenco scorreva. Aggiungendo la funzione freccia è stato risolto! –

+0

mi hai salvato la vita. Ed è geniale usare la funzione abbreviazione per evitare che signIn abbia il proprio ambito. Bello! –

5

si può anche fare in questo modo:

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

il resto del codice non ha bisogno di cambiamento.

2

Inoltre, se non si utilizza vuole legare e dal momento che stiamo utilizzando la sintassi ES6, è possibile scrivere la vostra funzione fuori assegnato come const (in un componente) piuttosto che una funzione ad esempio:

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

allora si può ancora chiamare all'interno del componente, come già siete senza dover legare all'interno del costruttore o in qualsiasi altro:

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

questo dovrebbe mantenere contesto di "questo" coerente dal signin sarà vincolato al componente solo una volta durante l'inizializzazione.

+0

BTW tutti e tre i metodi sono validi. Sembra essere una questione di preferenza. –