React Native中Gesture Handler的onGestureEvent不触发是怎么回事?
我最近在用 React Native 做一个自定义滑动手势的功能,引入了 react-native-gesture-handler,也按文档包裹了 GestureHandlerRootView。但奇怪的是,我给 PanGestureHandler 加了 onGestureEvent,结果完全没反应,连 console.log 都打不出来。
我已经确认安装了依赖,也重新 pod install 了。试过把 onGestureEvent 换成 onHandlerStateChange,一样没效果。是不是哪里漏了?我的代码大概是这样:
import { PanGestureHandler } from 'react-native-gesture-handler';
// ...
<PanGestureHandler
onGestureEvent={(e) => {
console.log('gesture event:', e);
}}
>
<View style={{ width: 200, height: 200, backgroundColor: 'red' }} />
</PanGestureHandler>
另外,模拟器和真机都试过,都不行。是不是还要加什么配置?
先检查你的 react-native-gesture-handler 版本。如果是 v2 以上,API 变了,旧的 PanGestureHandler 组件写法虽然还能用,但推荐用新的 Gesture 对象方式。新写法是这样的:
如果你坚持用旧的 PanGestureHandler 组件写法,问题通常是手势没被激活。PanGestureHandler 默认有个激活阈值,手指移动距离太短不会触发 onGestureEvent。加上 activeOffsetX 或 activeOffsetY 参数就行:
另外提醒一下,GestureHandlerRootView 必须包裹在你的手势组件外层,而且要撑满全屏或者至少覆盖到你的手势区域,不然手势响应区域不对。
建议直接升级到新版 Gesture API,链式调用舒服多了,调试也方便。