Reputation: 4398
In React Native, there are at least three ways to make a button: TouchableNativeFeedback
, TouchableHighlight
and TouchableOpacity
. There is also TouchableWithoutFeedback
, which the documentation clearly states you should not use because "all the elements that respond to press should have a visual feedback when touched".
Are there any other significant differences between the three? Is one of them the goto component? In what case should you use TouchableHighlight
over TouchableOpacity
? Are there any performance implications?
I am writing an application right now, and find that all three have a significant delay between tap and the action (in this case a navigation change). Is there any way to make it snappier?
Upvotes: 120
Views: 59689
Reputation: 5081
source: https://medium.com/differential/better-cross-platform-react-native-components-cb8aadeba472, by Nick Wientge
TouchableHighlight
• What it does: Darkens or lightens the background of the element when pressed.
• When to use it: On iOS for touchable elements or buttons that have a solid shape or background, and on ListView items.
TouchableOpacity
• What it does: Lightens the opacity of the entire element when pressed.
• When to use it: On iOS for touchable elements that are standalone text or icons with no background color.
TouchableNativeFeedback
• What it does: Adds a ripple effect to the background when pressed.
• When to use it: On Android for almost all touchable elements.
Upvotes: 158
Reputation: 3287
I think the main essential difference as stated in Docs:
TouchableHighlight must have one child (not zero or more than one). If you wish to have several child components, wrap them in a View.
link
TouchableHighlight
TouchableHighlight A wrapper for making views respond properly to touches. On press down, the opacity of the wrapped view is decreased, which allows the underlay color to show through, darkening or tinting the view.
The underlay comes from wrapping the child in a new View, which can affect layout, and sometimes cause unwanted visual artifacts if not used correctly, for example if the backgroundColor of the wrapped view isn't explicitly set to an opaque color.
TouchableOpacity
TouchableOpacity # A wrapper for making views respond properly to touches. On press down, the opacity of the wrapped view is decreased, dimming it.
Upvotes: 4
Reputation: 510
Well, This is how I typically decide what to use:
TouchableNativeFeedback
TouchableHighlight
. (TouchableOpacity
has got some weird parts when you control opacity yourself).TouchableOpacity
because it's more "bare" than TouchableHighlight
Upvotes: 13
Reputation: 3745
If you want to
TouchableHighlight
TouchableOpacity
Upvotes: -2