В React Native есть ли что-нибудь похожее на опору activeOpacity в новом нажимном компоненте?

#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 логическое значение для условного изменения непрозрачности и текста. Для будущих читателей будет лучше, если ваш ответ также немного объяснит подход.