W React Native, istnieją co najmniej trzy sposoby, aby jeden przycisk TouchableNativeFeedback
, TouchableHighlight
a TouchableOpacity
. Jest też taki TouchableWithoutFeedback
, którego dokumentacja wyraźnie stwierdza, że nie należy go używać, ponieważ „wszystkie elementy reagujące na prasę powinny mieć wizualną informację zwrotną po dotknięciu”.
- TouchableNativeFeedback jest dostępny tylko w systemie Android i „zastępuje widok inną instancją RCTView”
- TouchableHighlight „dodaje widok do hierarchii widoków”
- TouchableOpacity działa „bez zmiany hierarchii widoku”
Czy są jakieś inne znaczące różnice między tymi trzema? Czy jeden z nich jest komponentem goto? W jakim przypadku należy użyć TouchableHighlight
Over TouchableOpacity
? Czy są jakieś konsekwencje dla wydajności?
Piszę teraz aplikację i stwierdzam, że wszystkie trzy mają znaczne opóźnienie między dotknięciem a akcją (w tym przypadku zmiana nawigacji). Czy jest jakiś sposób, aby uczynić to szybszym?
react-native
damusnet
źródło
źródło
Odpowiedzi:
źródło: https://medium.com/differential/better-cross-platform-react-native-components-cb8aadeba472 , Nick Wientge
TouchableHighlight
• Co robi: przyciemnia lub rozjaśnia tło elementu po naciśnięciu.
• Kiedy go używać: w systemie iOS dla elementów dotykowych lub przycisków, które mają jednolity kształt lub tło, oraz dla elementów ListView.
TouchableOpacity
• Co to robi: po naciśnięciu rozjaśnia krycie całego elementu.
• Kiedy go używać: W systemie iOS dla elementów dotykowych, które są samodzielnym tekstem lub ikonami bez koloru tła.
TouchableNativeFeedback
• Działanie: Po naciśnięciu dodaje efekt falowania do tła.
• Kiedy go używać: w systemie Android dla prawie wszystkich elementów dotykowych.
źródło
Cóż, tak zazwyczaj decyduję, czego użyć:
TouchableNativeFeedback
TouchableHighlight
. (TouchableOpacity
ma kilka dziwnych części, gdy sam kontrolujesz krycie).TouchableOpacity
ponieważ jest bardziej „nagi” niżTouchableHighlight
źródło
Myślę, że główna istotna różnica, jak stwierdzono w Dokumentach:
TouchableHighlight must have one child (not zero or more than one). If you wish to have several child components, wrap them in a View.
połączyćTouchableHighlight
TouchableOpacity
źródło
Jeśli chcesz
TouchableHighlight
TouchableOpacity
źródło
<TouchableHighlight underlayColor="transparent" />
... a Facebook miksuje wszystkie te w aplikacji F8 github.com/fbsamples/f8app/blob/master/js/common/F8Touchable.js