React Native: Перегляд onPress не працює


104

Я стикаюся з дивною проблемою. У моєму домашньому додатку реагувати, якщо я встановив 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

Відповіді:


176

Ви можете використовувати TouchableOpacityдля onPressподії. Viewне забезпечує onPressопори

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

4
Повна довідкова документація тут: facebook.github.io/react-native/docs/touchableopacity.html
Мухаммед Ханнан

Чи може onPress працювати з функцією асинхронізації як зворотного дзвінка? Я не бачу цього згадки в офіційній документації.
ryanwebjackson

27

Ви можете обернути перегляд a, 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>

2
Тестований на iOS, і він працює просто чудово. Обидва з дотиком без зворотного зв’язку та
чіткою

Дякуємо, що поділилися @habed! Чи pointerEventsNoneнатискав блок дочірні на батьківському обгортанні?
Noitidart

6

Для цього можна використовувати TouchableOpacity, TouchableHighlight, TouchableNativeFeedback. Компонент перегляду не забезпечує onPress як реквізит. Тож ви використовуєте їх замість цього.

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

OR

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

OR

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


2

Крім того, ви можете також надати onStartShouldSetResponder для свого вигляду, наприклад:

<View onStartShouldSetResponder={() => console.log("View click")}>
  // some code here
</View>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.