React Native: View onPress çalışmıyor


108

Garip bir sorunla karşı karşıyayım. React native uygulamamda, onPressolayı Viewona ayarlarsam tetiklenmiyor, ancak aynısını Textiçeriye ayarlarsam ateşleniyor View. Burada neyi özlüyorum?

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

Bu neden böyle? Bu, React Native ile ilgili bir sorun mu? 0.43 sürümünü kullanıyorum

Yanıtlar:


181

Etkinlik TouchableOpacityiçin kullanabilirsiniz onPress. destek Viewsağlamaz onPress.

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


OnPress, geri arama olarak bir eşzamansız işlevle çalışabilir mi? Resmi belgelerde bundan bahsetmiyorum.
ryanwebjackson

27

Görünümü a ile kaydırabilir TouchableWithoutFeedbackve ardından onPressher zamanki gibi ve arkadaşlarınızı kullanabilirsiniz . Ayrıca pointerEvents, özniteliği çocuk görünümünde ayarlayarak da engelleyebilirsiniz , hatta ebeveyn üzerindeki işaretçi olaylarını bile engeller TouchableWithoutFeedback, ilginç, bu benim Android'deki ihtiyacımdı, iOS'ta test etmedim:

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
İOS'ta test edildi ve gayet iyi çalışıyor. Hem geri bildirim olmadan dokunulabilir hem de dokunulabilir vurgularla
18:59

@Habed'i paylaştığınız için teşekkürler! Alt pointerEventsNoneblok üzerindeki, sarma ebeveynine baskı yaptı mı?
Noitidart

6

Bunu başarmak için TouchableOpacity, TouchableHighlight, TouchableNativeFeedback'i kullanabilirsiniz. Görünüm bileşeni, onPress'i sahne olarak sağlamaz. Yani bunun yerine bunları kullanıyorsunuz.

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

OR

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

OR

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


2

Alternatif olarak, görünümünüze onStartShouldSetResponder'ı da sunabilirsiniz, örneğin:

<View onStartShouldSetResponder={() => console.log("View click")}>
  // some code here
</View>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.