React Native TouchableWithoutFeedback onLongPress 为什么能触发onPress
在 React Native 中,TouchableWithoutFeedback
组件是一个用于处理触摸事件的包装器。它可以处理多种触摸事件,包括 onPress
和 onLongPress
。然而,有时你可能会发现 onLongPress
事件触发后,onPress
事件也会被触发。这种行为可能会让人感到困惑。
onLongPress
触发后,onPress
也会被触发。���是因为在触摸事件结束时,onPress
事件会被调用。onPress
事件被触发。为了避免 onLongPress
触发后 onPress
也被触发,你可以在 onLongPress
处理函数中设置一个标志位来阻止 onPress
的执行。
import React, { useState } from 'react';
import { View, Text, TouchableWithoutFeedback } from 'react-native';
const App = () => {
const [longPressTriggered, setLongPressTriggered] = useState(false);
const handlePress = () => {
if (!longPressTriggered) {
console.log('onPress triggered');
}
setLongPressTriggered(false); // Reset the flag
};
const handleLongPress = () => {
console.log('onLongPress triggered');
setLongPressTriggered(true);
};
return (
<TouchableWithoutFeedback
onPress={handlePress}
onLongPress={handleLongPress}
>
<View style={{ width: 200, height: 200, backgroundColor: 'lightblue', justifyContent: 'center', alignItems: 'center' }}>
<Text>Press me</Text>
</View>
</TouchableWithoutFeedback>
);
};
export default App;
在这个例子中,我们使用了一个状态变量 longPressTriggered
来跟踪 onLongPress
是否被触发。如果 onLongPress
被触发,我们在 onPress
中检查这个标志位,并根据其值决定是否执行 onPress
的逻辑。
通过使用标志位来区分 onLongPress
和 onPress
事件,你可以避免在 onLongPress
触发后 onPress
也被触发的问题。这种方法可以确保你的触摸事件处理逻辑更加准确和可控。