React Native: просмотр onPress не работает

У меня возникла странная проблема. В моем onPress на родном приложении, если я установил onPress событие для View он не запускается, но если я установлю его в Text внутри View, он запускается. Что мне здесь не хватает?

<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>

Почему это так? Это проблема с React Native? Я использую версию 0.43

Ответы

Ответ 1

Вы можете использовать TouchableOpacity для события onPress. View не предоставляет onPress prop.

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

Ответ 2

Вы можете обернуть представление с помощью TouchableWithoutFeedback а затем использовать onPress и друзей, как обычно. Кроме того, вы все равно можете блокировать pointerEvents, установив атрибут на дочернем представлении, он даже блокирует события указателя на родительском TouchableWithoutFeedback, его интересный, это была моя потребность в Android, я не тестировал на 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>

Ответ 3

Для этого вы можете использовать TouchableOpacity, TouchableHighlight, TouchableNativeFeedback. Компонент просмотра не предоставляет onPress в качестве реквизита. Поэтому вы используете их вместо этого.

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

OR

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

OR

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