#react-native #react-native-android #react-native-ios #touchableopacity #pressable
Вопрос:
В TouchableOpacity можно установить значение параметра activeOpacity, чтобы затемнить кнопку после ее нажатия, чтобы у пользователя была обратная связь о том, что их касание было зарегистрировано, и он не нажимал одну и ту же кнопку повторно.
Есть ли что-нибудь подобное в новом нажимном компоненте? Или какой-либо способ легко добиться того же эффекта?
Ответ №1:
Вы можете попробовать следующий пример для достижения той же функциональности:
import React, { useState } from 'react';
import { Pressable, StyleSheet, Text, View } from 'react-native';
const App = () => {
const [timesPressed, setTimesPressed] = useState(0);
let textLog = '';
if (timesPressed > 1) {
textLog = timesPressed 'x onPress';
} else if (timesPressed > 0) {
textLog = 'onPress';
}
return (
<View style={styles.container}>
<Pressable
onPress={() => {
setTimesPressed((current) => current 1);
}}
style={({ pressed }) => [
{
backgroundColor: 'gray',
opacity: pressed ? 0.2 : 1
},
styles.wrapperCustom
]}>
{({ pressed }) => (
<Text style={styles.text}>
{pressed ? 'Pressed!' : 'Press Me'}
</Text>
)}
</Pressable>
<View style={styles.logBox}>
<Text testID="pressable_press_console">{textLog}</Text>
</View>
</View>
);
};
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: "center",
},
text: {
fontSize: 16
},
wrapperCustom: {
borderRadius: 8,
padding: 6
},
logBox: {
padding: 20,
margin: 10,
borderWidth: StyleSheet.hairlineWidth,
borderColor: '#f0f0f0',
backgroundColor: '#f9f9f9'
}
});
export default App;
Комментарии:
1. Хороший ответ, спасибо. Таким образом, вы используете
Pressed
логическое значение для условного изменения непрозрачности и текста. Для будущих читателей будет лучше, если ваш ответ также немного объяснит подход.