Коли використовувати TouchableNativeFeedback, TouchableHighlight або TouchableOpacity?


94

У React Native, є принаймні три способи зробити кнопку: TouchableNativeFeedback, TouchableHighlightі TouchableOpacity. Існує також те TouchableWithoutFeedback, що в документації чітко зазначено, що ви не повинні використовувати, оскільки "всі елементи, що реагують на натискання, повинні мати візуальний зворотний зв'язок при дотику".

  • TouchableNativeFeedback призначений лише для Android і "замінює View іншим екземпляром RCTView"
  • TouchableHighlight "додає подання до ієрархії подання"
  • TouchableOpacity працює "без зміни ієрархії подання"

Чи існують інші суттєві відмінності між цими трьома? Чи є один із них компонентом goto? У якому випадку слід використовувати TouchableHighlightover TouchableOpacity? Чи є наслідки для продуктивності?

Зараз я пишу програму і виявляю, що у всіх трьох є значна затримка між натисканням та дією (у цьому випадку зміна навігації). Чи є спосіб зробити його приємнішим?


4
Що стосується швидкості ... виведення чого-небудь до console.log значно уповільнює переходи сцени. Я тільки починаю реагувати на рідну мову і дещо не вражаю швидкості під час розробки своїх перших компонентів. Я видалив усі команди console.log (включаючи вимкнення журналу відновлення) і побудував для цілі випуску, і швидкість мене здула. Це відбувається завдяки розробці програм Cordova.
Тревіс Уайт

Відповіді:


115

джерело: https://medium.com/differential/better-cross-platform-react-native-components-cb8aadeba472 , Нік Віендж

TouchableHighlight

• Що робить: затемнює або освітлює фон елемента при натисканні.

• Коли використовувати: на iOS для елементів чи кнопок, що мають дотик, які мають суцільну форму або фон, а також на елементах ListView.

TouchableOpacity

• Що робить: освітлює непрозорість всього елемента при натисканні.

• Коли використовувати: на iOS для елементів, які можна торкнутися, які є автономним текстом або піктограмами без кольору тла.

TouchableNativeFeedback

• Що робить: додає ефект пульсації до фону при натисканні.

• Коли використовувати: на Android майже для всіх елементів, до яких можна торкнутися.


Дякую! З того часу я прочитав цю статтю, але вже не міг знайти її, щоб відповісти на власне запитання. Це саме те, що я шукав.
damusnet

1
при використанні TouchableNativeFeedback він має цей квадратний фон (я не маю на увазі пульсацію) Як ми можемо це налаштувати (наприклад, збільшити його розмір, зробити його круглим, або, можливо, видалити, і просто пульсація поодинці)?
Ясір

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

TouchableHighlight Обгортка, яка забезпечує належну реакцію поглядів на дотики. При натисканні вниз непрозорість загорнутого виду зменшується, що дозволяє кольоровій підкладці просвічувати, затемнювати або тонувати вигляд.

Підкладка виходить із загортання дочірнього елемента в новий вигляд, що може впливати на макет, а іноді спричиняти небажані візуальні артефакти, якщо він використовується неправильно, наприклад, якщо backgroundColor обгорнутого подання явно не встановлено в непрозорий колір.

TouchableOpacity

TouchableOpacity # Обгортка, яка дозволяє перегляду належним чином реагувати на дотики. При натисканні вниз непрозорість загорнутого виду зменшується, затемнюючи його.


-3

Якщо хочеш

  • кнопка виділення при натисканні - використовувати TouchableHighlight
  • змінити прозорість кнопки при натисканні - використовувати TouchableOpacity

3
Я думаю, що автор усвідомлює це, і запитує якусь більш складну відповідь.
Радек Чемерис

1
Більше того, ви навіть можете використовувати <TouchableHighlight underlayColor="transparent" />... і Facebook змішує всі їх у своєму додатку F8 github.com/fbsamples/f8app/blob/master/js/common/F8Touchable.js
damusnet
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.