Pressable — bu nədir, React Native-də toxunmaların işlənməsi

Müəllif: IT Sectr Dərc olunub: 2026-07-06 Oxuma vaxtı: 10 dəq

Pressable — köhnəlmiş TouchableHighlight, TouchableOpacity və TouchableWithoutFeedback komponentlərini əvəz edən, toxunmaları idarə etmək üçün müasir React Native komponentidir. Pressable pressed, hovered və focused vəziyyətlərinin aşkarlanması ilə vahid API təmin edir. Komponent React Native 0.63-də ortaya çıxmışdır və Meta tərəfindən bütün yeni layihələr üçün tövsiyə olunur. Komponent haqqında ətraflı məlumatı Meta sənədlərində oxuya bilərsiniz.

Başlıca

  • Pressable — pressed, hovered, focused vəziyyətlərini dəstəkləyən universal toxunma idarəetmə komponenti
  • API onPress, onLongPress, onPressIn, onPressOut geri çağırışları və vəziyyət əsaslı stilizasiya funksiyası daxildir
  • hitSlop UX-i yaxşılaşdırmaq üçün toxunma sahəsini komponentin görünən hüdudlarından kənara genişləndirir
  • Touchable-ın əvəz edilməsi — Pressable bütün Touchable komponentlərinin API-ni vahid çevik interfeysdə birləşdirir
  • Əlçatanlıq — komponent ARIA rollarını dəstəkləyir və VoiceOver və TalkBack-i avtomatik idarə edir

Pressable nədir?

Pressable — bütün toxunma növlərini idarə etmək üçün vahid interfeys təmin edən React Native komponentidir. Üç fərqli Touchable komponentindən (TouchableHighlight, TouchableOpacity, TouchableWithoutFeedback) fərqli olaraq, Pressable onları çevik vəziyyət və stilizasiya sistemi ilə bir komponentdə əvəz edir.

Komponent React Native 0.63-də (sentyabr 2020) təqdim edilmişdir. Meta-nın məlumatlarına görə (2026), React Native-də yeni layihələrin 70%-i Touchable komponentləri əvəzinə Pressable-dən istifadə edir. Pressable Touchable-ın əsas problemini — dağınıq API və müxtəlif effektlər üçün komponentlər arasında keçid ehtiyacını həll edir.

Pressable fəlsəfəsi

TouchableOpacity-dən fərqli olaraq, burada toxunma effekti sərt şəkildə müəyyən edilmişdir (şeffaflığın dəyişməsi), Pressable cari vəziyyəti qəbul edən funksiya təqdim edir. Tərtibatçı toxunmaya vizual reaksiyanı özü müəyyənləşdirir: rəngi, miqyası, kölgəni və ya effektlərin kombinasiyasını dəyişmək. Bu, UX üzərində tam nəzarət verir.

Pressable vəziyyətləri: pressed, hovered, focused

Pressable üç qarşılıqlı təsir vəziyyəti müəyyənləşdirir: pressed (barmaq ekranda), hovered (kursor element üzərində Web/TV-də), focused (element klaviatura fokusunda). Hər vəziyyət müvafiq geri çağırışı aktivləşdirir və stil funksiyasına və uşaq render funksiyasına ötürülür.

VəziyyətŞərtTipik reaksiya
pressedBarmaq ekranda və ya klik basılı saxlanılırŞəffaflığın, miqyasın, fon rənginin dəyişməsi
hoveredKursor element üzərində (Web, TV)İşıqlandırma, kölgə, alt xətt
focusedElement klaviatura fokusundaKontur, çərçivə, rəng dəyişməsi

Vacib: hovered və focused yalnız göstərici dəstəyi olan platformalarda işləyir (Web, Android TV, Apple TV). Mobil cihazlarda yalnız pressed mövcuddur. Platformalararası tətbiqlər üçün vizual reaksiyaları bu məhdudiyyəti nəzərə alaraq dizayn edin.

js
<Pressable
  style={({ pressed }) => [
    styles.button,
    pressed && styles.buttonPressed,
  ]}
  onPress={handlePress}>
  {({ pressed }) => (
    <Text style={pressed ? styles.textPressed : styles.text}>
      {pressed ? 'Release' : 'Press'}
    </Text>
  )}
</Pressable>

Pressable API və geri çağırışları

Pressable API dörd əsas geri çağırış daxildir: onPress (buraxma ilə tam basma), onLongPress (uzun basma), onPressIn (toxunmanın başlanğıcı) və onPressOut (toxunmanın sonu). onPressIn və onPressOut kombinasiyası fərdi animasiyalar yaratmağa imkan verir.

Əlavə propslar: delayLongPress (uzun basma gecikməsi, standart 500 ms), pressRetentionOffset (basmanın ləğv edildiyi sahə), android_ripple (Android-də ripple effekti). Vacib: Ripple yalnız Android 5+-də işləyir.

js
<Pressable
  onPress={() => console.log('Basılıb')}
  onLongPress={() => console.log('Uzun basma')}
  onPressIn={() => console.log('Barmaq aşağı')}
  onPressOut={() => console.log('Barmaq yuxarı')}
  delayLongPress={300}
  android_ripple={{ color: 'rgba(0,0,0,0.1)', borderless: false }}
  style={styles.button}>
  <Text>Press me</Text>
</Pressable>

onPress yalnız barmaq komponentin daxilində (pressRetentionOffset nəzərə alınmaqla) qaldırıldıqda çağrılır. İstifadəçi barmağını hüduddan kənara çəkərsə, onPress işləmir ki, bu da yanlış basmaların qarşısını alır. onPressOut istənilən halda barmaq qaldırıldıqda çağrılır.

hitSlop: toxunma sahəsinin genişləndirilməsi

hitSlop — toxunma sahəsini komponentin görünən hüdudlarından kənara genişləndirən Pressable propsudur. Bu kiçik elementlər üçün çox vacibdir: ikonalar, çekbokslar, radio düymələr. Apple HIG minimum toxunma hədəfi ölçüsü kimi 44x44 nöqtə tövsiyə edir. hitSlop vizual ölçünü dəyişmədən bu tələbi yerinə yetirməyə imkan verir.

hitSlop { top, bottom, left, right } obyektini və ya bütün tərəflər üçün vahid rəqəmi qəbul edir. Dəyərlər məntiqi piksellərlə (dp/pt) verilir. 24x24 ölçülü ikonalar üçün 44x44 toxunma hədəfinə çatmaq üçün hər tərəfdən minimum 10-12 hitSlop tövsiyə olunur.

js
<Pressable
  hitSlop={{ top: 10, bottom: 10, left: 10, right: 10 }}
  onPress={handleIconPress}
  style={styles.iconButton}>
  <Icon name="star" size={24} />
</Pressable>

pressRetentionOffset — hitSlop-un əksi: istifadəçinin basmanı ləğv etmədən komponentin hüdudlarından kənara çıxa biləcəyi sahəni müəyyənləşdirir. Standart olaraq hitSlop-a bərabərdir. Basmanın hüduddan kənarda saxlanmasını istəyirsinizsə, pressRetentionOffset-i artırın.

Pressable vs Touchable: nə vaxt keçməli

Pressable vs Touchable — toxunmaları idarə etmək üçün komponent seçərkən əsas sual. TouchableOpacity, TouchableHighlight və TouchableWithoutFeedback köhnəlmiş komponentlərdir, silinməyəcəklər, lakin yeni xüsusiyyətlər almırlar. Meta yeni layihələr üçün Pressable-i tövsiyə edir.

Pressable-in əsas üstünlükləri: bütün effekt növləri üçün vahid API, fərdi stilizasiya üçün pressed vəziyyətinə giriş, hovered/focused vəziyyətlərinin dəstəyi, hitSlop və pressRetentionOffset, əlavə konfiqurasiya olmadan onLongPress geri çağırışı. TouchableOpacity yalnız sadə şeffaflıq dəyişikliyi üçün uyğundur.

SsenariTouchablePressable
Sadə basmaTouchableOpacityPressable + style-də şeffaflıq
Fon işıqlandırmasıTouchableHighlightPressable + backgroundColor
Vizual effektsizTouchableWithoutFeedbackBoş style ilə Pressable
Uzun basmaİstənilən Touchable-də onLongPressPressable-də onLongPress
Fərdi animasiyaAnimated + onPressIn/OutPressable + useAnimatedStyle
Android-də RippleTouchableNativeFeedbackPressable + android_ripple

Pressable istifadə nümunələri

Pressable minimal kodla mürəkkəb interaktiv elementlər yaratmağa imkan verir. Aşağıda — basarken miqyas dəyişikliyi və Android-də ripple effekti olan animasiyalı düymə nümunəsi. Belə bir düymə TouchableOpacity + Animated kombinasiyasını əvəz edir.

js
const AnimatedButton = ({ title, onPress }) => {
  const scale = React.useRef(new Animated.Value(1)).current;

  const handlePressIn = () => {
    Animated.spring(scale, {
      toValue: 0.96,
      useNativeDriver: true,
    }).start();
  };

  const handlePressOut = () => {
    Animated.spring(scale, {
      toValue: 1,
      friction: 3,
      useNativeDriver: true,
    }).start();
  };

  return (
    <Pressable
      onPress={onPress}
      onPressIn={handlePressIn}
      onPressOut={handlePressOut}
      android_ripple={{ color: 'rgba(255,255,255,0.3)' }}
      style={styles.button}>
      <AnimatedView style={[styles.inner, { transform: [{ scale }] }]}>
        <Text style={styles.text}>{title}</Text>
      </AnimatedView>
    </Pressable>
  );
};

Vacib: Pressable-də animasiyalar üçün useNativeDriver: true istifadə edin. Bu, animasiyanı yerli axına köçürür və sürətli basmalarda kadr itkilərinin qarşısını alır. Transform və şeffaflıq üçün yerli sürücü bütün platformalarda dəstəklənir.

Tez-tez verilən suallar

Kodu dəyişmədən TouchableOpacity əvəzinə Pressable istifadə edə bilərəm?

Xeyr, Pressable-in fərqli API-si var. TouchableOpacity basarkən avtomatik şeffaflıq tətbiq edir. Pressable vəziyyət funksiyası vasitəsilə açıq stil təyin edilməsini tələb edir. Əvəz etmə sadədir: style={({ pressed }) => [{ opacity: pressed ? 0.5 : 1 }]} ötürün.

Material Design-dakı kimi ripple effektini necə etməli?

android_ripple propsundan { color, borderless } obyekti ilə istifadə edin. Ripple rəngi rgba formatında verilir. Dairəvi düymələr üçün borderless: true istifadə edin. Ripple yalnız Android 5+-də işləyir. iOS-da fərdi animasiyadan istifadə edin.

Sürətli skroll zamanı onPress niyə işləmir?

Pressable-in skroll zamanı təsadüfi basmalara qarşı qorunması var. İstifadəçi siyahını skroll edirsə, onPress çağrılmır. Bu davranışı pressRetentionOffset və delayPressIn vasitəsilə konfiqurasiya etmək olar.

Pressable ilə uzun basmanı necə izləməli?

onLongPress propsundan istifadə edin — uzun basmanın daxili dəstəyi. Gecikmə delayLongPress vasitəsilə konfiqurasiya edilir (standart 500 ms). Kontekst menyuları və drag-and-drop üçün onLongPress-i onPressIn ilə birləşdirin.

Pressable klaviatura naviqasiyasını dəstəkləyirmi?

Bəli, Pressable Android TV, Apple TV və Web-də klaviatura naviqasiyası üçün focused vəziyyətini dəstəkləyir. Fokusun göstərilməsi üçün { focused } vasitəsilə stilizasiyadan istifadə edin. Mobil cihazlarda focused vəziyyəti aktual deyil.

Nəticə

  • Pressable — TouchableOpacity, TouchableHighlight və TouchableWithoutFeedback-i əvəz edən universal React Native toxunma idarəetmə komponenti
  • Vəziyyətlər pressed, hovered, focused stil funksiyasına ötürülür, hər ssenari üçün reaksiyanı fərdiləşdirməyə imkan verir
  • hitSlop vizual ölçünü dəyişmədən toxunma hədəfini 44x44 nöqtəyə qədər genişləndirir, kiçik elementlərdə UX-i yaxşılaşdırır
  • API onPress, onLongPress, onPressIn, onPressOut daxildir, gecikmə delayLongPress vasitəsilə konfiqurasiya edilir
  • android_ripple Android 5+-də rəng və forma konfiqurasiyası ilə Material Design ripple effekti əlavə edir
  • Touchable-dən miqrasiya avtomatik effektlərin vəziyyət funksiyası vasitəsilə açıq stilizasiya ilə əvəz edilməsini tələb edir
  • Animated + Pressable performans üçün useNativeDriver ilə hamar basma animasiyaları yaradır

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun