如何通过 React Native 中的视图传递触摸但触发 onPress?

Posted

技术标签:

【中文标题】如何通过 React Native 中的视图传递触摸但触发 onPress?【英文标题】:How can I pass a touch through a view in React Native but trigger the onPress? 【发布时间】:2021-12-17 23:21:26 【问题描述】:

我正在尝试创建一个可触发其onPress 的全屏可触摸视图,但也将触摸向下传递到其后面的视图。在下面的示例中,我希望在用户滚动滚动视图时调用 onPress 函数。我可以让滚动视图在Pressable 上以pointerEvents="none" 响应,但这样做会使onPress 不会被触发。有没有办法让这两者一起工作?

const styles = StyleSheet.create(
  containingTouchable: 
    position: 'absolute',
    top: 0,
    right: 0,
    left: 0,
    bottom: 0,
    backgroundColor: 'rgba(100,100,100,0.3)',
  ,
);

const Component = () => 
  <Pressable
      style=styles.containingTouchable
      onPress=() => 
        console.warn('pressed me');
      
  >
    <View></View>
  </Pressable>
  <ScrollView> ... </ScrollView>


【问题讨论】:

我认为你必须删除这个问题的 reactjs 标签。 【参考方案1】:

我会使用react-native-gesture-handler 解决这个问题。代替Pressable,使用TapGestureHandler。并从react-native-gesture-handler 导入ScrollView

Rngh 提供了一个名为 simultaneousHandlers 的道具,因此您可以同时收听多个触摸事件。

所以你可以这样做:

const tapGestureHandlerRef = useRef(null);

<TapGestureHandler
    ref=tapGestureHandlerRef
    onActivated=handleOnPress
    onHandlerStateChange=handleOnPress
>
    <ScrollView
     simultaneousHandlers=tapGestureHandlerRef
    > 
        content
    </ScrollView>
  </TapGestureHandler
>

onActivatedonHandlerStateChange 都可以触发 onPress 事件,但它们的行为不同。查看文档以了解最适合您的用例:https://docs.swmansion.com/react-native-gesture-handler/docs/api/gesture-handlers/tap-gh

【讨论】:

以上是关于如何通过 React Native 中的视图传递触摸但触发 onPress?的主要内容,如果未能解决你的问题,请参考以下文章

带有 redux 的 React-Native-Navigation V2 无法传递道具

如何在 React Native 中的组件之间传递数据

React Native:在 Navigator Pop 上更改组件(文本)

React Native 在兄弟视图之间传递数据

如何使视频适合 React Native 中的视图?

如何在 React Native 中的多个组件之间传递函数