¿Cuándo usar TouchableNativeFeedback, TouchableHighlight o TouchableOpacity?

94

En Reaccionar nativo, hay por lo menos tres maneras de hacer un botón: TouchableNativeFeedback, TouchableHighlighty TouchableOpacity. También existe TouchableWithoutFeedback, que la documentación indica claramente que no debes usar porque "todos los elementos que responden a la prensa deben tener una retroalimentación visual cuando se tocan".

¿Existen otras diferencias significativas entre los tres? ¿Uno de ellos es el componente goto? ¿En qué caso debería usar TouchableHighlightover TouchableOpacity? ¿Hay implicaciones en el rendimiento?

Estoy escribiendo una aplicación en este momento y encuentro que las tres tienen un retraso significativo entre el toque y la acción (en este caso, un cambio de navegación). ¿Hay alguna forma de hacerlo más ágil?

damusnet
fuente
4
En lo que respecta a la agilidad ... enviar cualquier cosa a console.log ralentiza considerablemente las transiciones de escena. Recién estoy comenzando a reaccionar nativo y no me impresionó la velocidad mientras desarrollaba mis primeros componentes. Eliminé todos los comandos de console.log (incluida la desactivación del registrador redux) y construí para el objetivo de lanzamiento y la velocidad me dejó alucinado. Esto proviene del desarrollo de aplicaciones de Cordova.
Travis White

Respuestas:

115

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

TouchableHighlight

• Qué hace: Oscurece o aclara el fondo del elemento cuando se presiona.

• Cuándo usarlo: en iOS para elementos táctiles o botones que tienen una forma sólida o un fondo, y en elementos ListView.

TouchableOpacity

• Qué hace: aclara la opacidad de todo el elemento cuando se presiona.

• Cuándo usarlo: En iOS para elementos táctiles que son texto independiente o íconos sin color de fondo.

TouchableNativeFeedback

• Qué hace: agrega un efecto dominó al fondo cuando se presiona.

• Cuándo usarlo: en Android para casi todos los elementos táctiles.

Edan Chetrit
fuente
¡Gracias! Había leído este artículo desde entonces, pero no pude encontrarlo más para responder a mi propia pregunta. Es exactamente lo que estaba buscando.
damusnet
1
al usar TouchableNativeFeedback, tiene este fondo cuadrado (no me refiero a ondulación). ¿Cómo lo personalizamos (por ejemplo, aumentar su tamaño, redondearlo o quizás eliminarlo y solo tener ondulación)?
Yasir
8

Bueno, así es como suelo decidir qué usar:

  • Si estoy compilando solo para Android y el componente es lo suficientemente grande como para que los comentarios nativos sean visiblemente diferentes a los demás, entonces uso TouchableNativeFeedback
  • Si quiero controlar la opacidad en el componente o si quiero que el botón tenga color cuando se toca, y no quiero controlar el estado de enfoque de algún elemento dentro del Touchable, entonces uso TouchableHighlight. ( TouchableOpacitytiene algunas partes extrañas cuando tú mismo controlas la opacidad).
  • En todos los demás casos, lo uso TouchableOpacityporque está más "desnudo" queTouchableHighlight
mienaikoe
fuente
1
Esta respuesta es un comienzo útil ... pero esperaba encontrar razones técnicas y / o relacionadas con el diseño más sólidas de por qué usar uno frente al otro.
Beau Smith
2

Creo que la principal diferencia esencial como se indica en 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.enlace

Tocable Resaltar

TouchableHighlight Un contenedor para hacer que las vistas respondan correctamente a los toques. Al presionar hacia abajo, la opacidad de la vista envuelta se reduce, lo que permite que el color de la base se muestre, oscureciendo o teñiendo la vista.

La capa subyacente proviene de envolver al niño en una nueva Vista, lo que puede afectar el diseño y, a veces, causar artefactos visuales no deseados si no se usa correctamente, por ejemplo, si el backgroundColor de la vista envuelta no se establece explícitamente en un color opaco.

Opacidad táctil

TouchableOpacity # Un contenedor para hacer que las vistas respondan correctamente a los toques. Al presionar hacia abajo, la opacidad de la vista envuelta se reduce, atenuándola.

Mohamed Saleh
fuente
-3

Si quieres

  • botón resaltar al presionar - usar TouchableHighlight
  • cambiar la opacidad del botón al presionarlo - usar TouchableOpacity
estereodenis
fuente
3
Creo que el autor es consciente de esto y está pidiendo una respuesta más compleja.
Radek Czemerys
1
Además, incluso puede usar <TouchableHighlight underlayColor="transparent" />... y Facebook mezcla todos los de su aplicación F8 github.com/fbsamples/f8app/blob/master/js/common/F8Touchable.js
damusnet