如何在React Native中处理触摸事件?


在设备上,与UI的交互主要通过触摸或点击进行。因此,当我们使用应用程序时,我们大多点击按钮来执行某些操作,或者通过触摸屏幕来滚动页面,尝试缩放页面等。为了处理这些手势,例如点击、触摸,React Native 有事件来捕获它,或者可以使用可触摸组件来处理触摸。

让我们看看点击按钮时会发生什么。

示例1:处理按钮点击

这是一个简单的按钮示例。

<Button
   onPress={() => {
      alert('You Tapped on Me!');
   }}
   title="Tap Me"
/>

当用户点击按钮时,onPress 事件将被调用。这是一个可运行的示例。

import React from 'react';
import { Button, View, Alert } from 'react-native';
const App = () => {
   return (
      <View style={{flex :1, justifyContent: 'center', margin: 15 }}>
         <Button
            onPress={() => {
               alert('You Tapped on Me!');
            }}
            title="Tap Me"
         />
      </View>
   );
}
export default App;

输出

可触摸组件

React Native 的可触摸组件有助于捕获点击手势,以防像 onPress() 这样的事件(用于 React Native 组件,如按钮)出现任何问题。

可触摸组件提供以下选项来处理对任何 React Native 组件的点击手势

  • Touchable Opacity (可触摸不透明度)
  • Touchable Highlight (可触摸高亮)
  • Touchable Without Feedback (无反馈可触摸)

Touchable Opacity (可触摸不透明度)

此元素在触摸时会更改元素的不透明度。

您可以按如下方式使用 TouchableOpacity:

<TouchableOpacity onPress={() => alert('You Tapped Me')}>
   <Text style = {styles.text}>
      Button
   </Text>
</TouchableOpacity>

这是一个可运行的示例:

import React from 'react'
import { TouchableOpacity, StyleSheet, View, Text } from 'react-native'
const App = () => {
   return (
      <View style = {styles.container}>
         <TouchableOpacity onPress={() => alert('You Tapped Me')}>
            <Text style = {styles.text}>
               Button
            </Text>
         </TouchableOpacity>
      </View>
   )
}
export default App
const styles = StyleSheet.create ({
   container: {
      alignItems: 'center',
   },
   text: {
      borderWidth: 1,
      padding: 25,
      borderColor: 'black',
      backgroundColor: 'red'
   }
});

用户触摸按钮时,您将看到不透明度的变化。

Touchable Highlight (可触摸高亮)

当用户按下元素时,它会变暗,并且底层颜色会透出来。

您必须在使用前导入 TouchableHighlight,如下所示:

import { TouchableHighlight } from 'react-native'

Button 组件包裹在 Text 组件内,Text 组件包裹在 TouchableHighlight 组件内。您可以根据需要向组件添加样式。onPress 函数添加到 TouchableHighlight 中,点击时将显示警报消息。

<TouchableHighlight onPress={() => alert('You Tapped Me')} activeOpacity={0.6}>
   <Text style = {styles.text}>
      Button
   </Text>
</TouchableHighlight>

完整的可运行示例如下:

import React from 'react'
import { View, TouchableHighlight, Text, StyleSheet } from 'react-native'
const App = (props) => {
   return (
      <View style = {styles.container}>
         <TouchableHighlight onPress={() => alert('You Tapped Me')} activeOpacity={0.6}>
            <Text style = {styles.text}>
               Button
            </Text>
         </TouchableHighlight>
      </View>
   )
}
export default App
const styles = StyleSheet.create ({
   container: {
      padding:100,
      alignItems: 'center',
   },
   text: {
      borderWidth: 1,
      padding: 25,
      borderColor: 'black',
      backgroundColor: 'gray'
   }
})

输出

Touchable Without Feedback (无反馈可触摸)

当您想要处理触摸事件并且不需要任何反馈时,应该使用此方法。

这里 Button 包裹在 TouchableWithoutFeedback 组件内,如下所示:

<TouchableWithoutFeedback onPress={() => alert('You Tapped Me')}>
   <Text style = {styles.text}>
      Button
   </Text>
</TouchableWithoutFeedback>

示例:使用 TouchableWithoutFeedback 组件

import React from 'react'
import { View, TouchableWithoutFeedback, Text, StyleSheet } from 'react-native'
const Home = (props) => {
   return (
      <View style = {styles.container}>
         <TouchableWithoutFeedback onPress={() => alert('You Tapped Me')}>
            <Text style = {styles.text}>
               Button
            </Text>
         </TouchableWithoutFeedback>
      </View>
   )
}
export default Home
const styles = StyleSheet.create ({
   container: {
      padding:100,
      alignItems: 'center',
   },
   text: {
      borderWidth: 1,
      padding: 25,
      borderColor: 'black',
      backgroundColor: 'gray'
   }
})

输出

更新于:2021年7月1日

498 次浏览

启动您的职业生涯

完成课程获得认证

开始学习
广告