Это неприятный побочный эффект реализации двух компонентов.
По сути, TouchableOpacity
- это представление с собственной поддержкой, которое поддерживает сенсорное взаимодействие путем вызова setNativeProps({ opacity })
в этом представлении, тогда как TouchableWithoutFeedback
просто обертывает собственное представление и присоединяет обработчики касаний.
Чтобы заставить TouchableWithoutFeedback
вести себя как TouchableOpacity
, вложите в него дополнительный View
и определите любые стили в дочернем представлении:
До:
<TouchableOpacity onPress={...} style={styles.touchable}>
// Touchable content
</TouchableOpacity>
После:
<TouchableWithoutFeedback onPress={...}>
<View style={styles.touchable}>
// Touchable content
</View>
</TouchableWithoutFeedback>
Я не уверен, почему API был спроектирован таким образом - я предполагаю, что нужно избегать создания дополнительного собственного вида резервного копирования по соображениям производительности, когда он не нужен.
Однако с точки зрения рефакторинга это немного затрудняет переход между различными типами сенсорных устройств. В своих проектах я обычно создаю настраиваемый компонент Touchable, который скрывает эту логику за опорой, или использую что-то вроде react-native-platform-touchable, что дает вам эффекты в стиле материала Android на Android.
person
jevakallio
schedule
08.01.2018