React Native: View onPress non funziona


104

Sto affrontando uno strano problema. Nella mia app nativa di reazione, se imposto l' onPressevento Viewnon viene attivato, ma se imposto lo stesso Textall'interno View, si attiva . Cosa mi manca qui?

<View style={{backgroundColor: "red", padding: 20}}>
  <Text onPress={()=> {
    console.log('works');
    }
  }>X</Text>
</View>


<View style={{backgroundColor: "red", padding: 20}} onPress={()=> {
    console.log('does not work');
    }
  }>
  <Text>X</Text>
</View>

Perché è così? È un problema con React Native? Sto usando la versione 0.43

Risposte:


176

Puoi usare TouchableOpacityper onPressevento. Viewnon fornisce onPressprop.

<TouchableOpacity style={{backgroundColor: "red", padding: 20}} onPress={()=> {
    console.log('does not work');
    }
  }>
  <Text>X</Text>
</TouchableOpacity>

4
La documentazione di riferimento completa è qui: facebook.github.io/react-native/docs/touchableopacity.html
Muhammad Hannan

OnPress può funzionare con una funzione asincrona come callback? Non vedo menzione di questo nella documentazione ufficiale.
ryanwebjackson

27

Puoi avvolgere la vista con un TouchableWithoutFeedbacke poi usare onPresse amici come al solito. Inoltre puoi ancora bloccare pointerEventsimpostando l'attributo sulla visualizzazione figlio, blocca persino gli eventi del puntatore sul genitore TouchableWithoutFeedback, è interessante, questo era il mio bisogno su Android, non ho testato su iOS:

https://facebook.github.io/react-native/docs/touchablewithoutfeedback.html

<TouchableWithoutFeedback onPressIn={this.closeDrawer}>
    <Animated.View style={[styles.drawerBackground, styleBackground]} pointerEvents={isOpen ? undefined : 'none'} />
</TouchableWithoutFeedback>

2
Testato su iOS e funziona perfettamente. Entrambi con touchable senza feedback e
touchable

Grazie per aver condiviso @habed! Il pointerEventsNoneblocco del bambino preme sul genitore che avvolge?
Noitidart

6

Puoi usare TouchableOpacity, TouchableHighlight, TouchableNativeFeedback per ottenere questo risultato. Il componente Visualizza non fornisce onPress come oggetti di scena. Quindi usi questi invece di quello.

<TouchableNativeFeedback
        onPress={this._onPressButton}
</TouchableNativeFeedback>

OR

<TouchableHighlight onPress={this._onPressButton}>
</TouchableHighlight>

OR

<TouchableOpacity onPress={this._onPressButton}>
</TouchableOpacity>


2

In alternativa puoi anche fornire onStartShouldSetResponder alla tua visualizzazione, in questo modo:

<View onStartShouldSetResponder={() => console.log("View click")}>
  // some code here
</View>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.