何时使用TouchableNativeFeedback,TouchableHighlight或TouchableOpacity?


94

在本地做出反应,至少有三种方法可以使一个按钮:TouchableNativeFeedbackTouchableHighlightTouchableOpacity。还有TouchableWithoutFeedback,文档明确指出您不应该使用,因为“触摸新闻时,所有响应新闻的元素都应具有视觉反馈”。

两者之间还有其他重大区别吗?其中之一是goto组件吗?在什么情况下您应该TouchableHighlight用完TouchableOpacity?对性能有影响吗?

我现在正在编写一个应用程序,发现所有三个在点击和操作之间都有很大的延迟(在本例中为导航更改)。有什么办法可以使它变得更敏捷?


4
就快照而言,将任何内容输出到console.log都会大大减慢场景转换的速度。我才刚开始使用本机响应,在开发我的第一个组件时对速度没有什么印象。我删除了所有console.log命令(包括禁用redux logger),并为发布目标而构建,速度让我震惊。这来自开发Cordova应用程序。
特拉维斯·怀特

Answers:


115

来源:Nick Wientge,https : //medium.com/differential/better-cross-platform-react-native-components-cb8aadeba472

TouchableHighlight

•作用:按下时使元素的背景变暗或变亮。

•何时使用它:在iOS上具有纯色形状或背景的可触摸元素或按钮,在ListView项上。

TouchableOpacity

•作用:按下时减轻整个元素的不透明度。

•何时使用:在iOS上用于可触摸的元素,这些元素是独立的文本或无背景色的图标。

TouchableNativeFeedback

•功能:按下时在背景上添加涟漪效果。

•何时使用:在Android上几乎适用于所有可触摸元素。


谢谢!从那以后我就读了这篇文章,但是找不到答案来回答我自己的问题。这正是我想要的。
damusnet

1
当使用TouchableNativeFeedback时,它具有方形背景(我不是说波纹),我们如何自定义它(例如,增加其尺寸,使其变圆或去除它而仅具有波纹)?
Yasir

8

好吧,这就是我通常决定使用什么的方式:

  • 如果我仅针对Android进行构建,并且组件足够大,以至于本机反馈明显不同于使用其他反馈,那么我将使用 TouchableNativeFeedback
  • 如果我想控制组件的不透明度,或者希望按钮在触摸时具有颜色,并且我不想控制Touchable内某个元素的聚焦状态,则可以使用TouchableHighlight。(TouchableOpacity当您自己控制不透明度时,会有一些奇怪的部分)。
  • 在所有其他情况下,我使用TouchableOpacity它是因为它比“裸露”更多TouchableHighlight

1
这个答案是一个有用的开始……但是我希望找到更多可靠的技术和/或设计相关原因来说明为什么要相互使用。
博·史密斯

2

我认为文档中所述的主要本质区别在于:

TouchableHighlight must have one child (not zero or more than one). If you wish to have several child components, wrap them in a View.链接

可触摸的高光

TouchableHighlight用于使视图正确响应触摸的包装器。按下时,降低了包裹视图的不透明度,这使底层颜色可以透彻显示,使视图变暗或着色。

底色来自将子级包装到新的View中,这会影响布局,并且如果使用不正确,有时会导致不必要的视觉伪影,例如,如果包装后的view的backgroundColor没有显式设置为不透明的颜色。

可触摸的不透明度

TouchableOpacity#用于使视图正确响应触摸的包装器。按下时,已包装视图的不透明度会降低,从而使其变暗。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.