React Native: Xem onPress không hoạt động


104

Tôi đang đối mặt với một vấn đề kỳ lạ. Trong ứng dụng gốc phản ứng của tôi, nếu tôi đặt onPresssự kiện cho Viewnó sẽ không được kích hoạt nhưng nếu tôi đặt sự kiện tương tự cho Textbên trong View, nó sẽ kích hoạt. Tôi còn thiếu gì ở đây?

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

Tại sao cái này rất? Đây có phải là vấn đề với React Native không? Tôi đang sử dụng phiên bản 0.43

Câu trả lời:


175

Bạn có thể sử dụng TouchableOpacitycho onPresssự kiện. Viewkhông cung cấp chỗ dựa onPress.

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

4
Toàn bộ tài liệu tham khảo ở đây: facebook.github.io/react-native/docs/touchableopacity.html
Muhammad Hannan

OnPress có thể hoạt động với một chức năng không đồng bộ khi gọi lại của nó không? Tôi không thấy đề cập đến điều này trong tài liệu chính thức.
ryanwebjackson

27

Bạn có thể bao quát chế độ xem bằng a TouchableWithoutFeedbackvà sau đó sử dụng onPressvà bạn bè như bình thường. Ngoài ra, bạn vẫn có thể chặn pointerEventsbằng cách đặt thuộc tính trên chế độ xem con, nó thậm chí còn chặn các sự kiện con trỏ trên cấp độ chính TouchableWithoutFeedback, điều thú vị là, đây là nhu cầu của tôi trên Android, tôi đã không thử nghiệm trên 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
Đã thử nghiệm trên iOS và nó hoạt động tốt. Cả hai đều có thể chạm mà không cần phản hồi và điểm nổi bật có thể chạm
habed

Cảm ơn vì đã chia sẻ @habed! Đã làm pointerEventsNonetrên máy ép khối đứa trẻ trên gói cha mẹ?
Noitidart

6

Bạn có thể sử dụng TouchableOpacity, TouchableHighlight, TouchableNativeFeedback, để đạt được điều này. Thành phần xem không cung cấp onPress làm đạo cụ. Vì vậy, bạn sử dụng những thay vì đó.

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

OR

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

OR

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


2

Ngoài ra, bạn cũng có thể cung cấp onStartShouldSetResponder cho chế độ xem của mình, như sau:

<View onStartShouldSetResponder={() => console.log("View click")}>
  // some code here
</View>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.