Pressable — यह क्या है, React Native में दबाव प्रबंधन

लेखक: IT Sectr प्रकाशित: 2026-07-06 पढ़ने का समय: 10 मिनट

Pressable React Native में स्पर्श संभालने के लिए एक आधुनिक घटक है, जो पुराने TouchableHighlight, TouchableOpacity और TouchableWithoutFeedback को बदलता है। Pressable pressed, hovered और focused अवस्थाओं का पता लगाने के साथ एक एकीकृत API प्रदान करता है। यह घटक React Native 0.63 में पेश किया गया था और Meta सभी नए प्रोजेक्ट्स के लिए इसकी अनुशंसा करता है। Meta के दस्तावेज़ में और जानें।

मुख्य बिंदु

  • Pressable — pressed, hovered और focused अवस्था समर्थन के साथ एक सार्वभौमिक स्पर्श संभालने वाला घटक
  • API में onPress, onLongPress, onPressIn, onPressOut कॉलबैक और अवस्था-आधारित शैलीकरण फ़ंक्शन शामिल है
  • hitSlop UX बेहतर बनाने के लिए दृश्य घटक सीमाओं से परे स्पर्श क्षेत्र का विस्तार करता है
  • Touchable प्रतिस्थापन — Pressable सभी Touchable घटकों के API को एक लचीले इंटरफ़ेस में एकीकृत करता है
  • पहुँच — घटक ARIA भूमिकाओं का समर्थन करता है और स्वचालित रूप से VoiceOver और TalkBack को संभालता है

Pressable क्या है?

Pressable एक React Native घटक है जो सभी प्रकार के स्पर्शों को संभालने के लिए एक एकीकृत इंटरफ़ेस प्रदान करता है। तीन अलग-अलग Touchable घटकों (TouchableHighlight, TouchableOpacity, TouchableWithoutFeedback) के विपरीत, Pressable उन सभी को एक लचीली अवस्था और शैलीकरण प्रणाली से बदल देता है।

यह घटक React Native 0.63 (सितंबर 2020) में पेश किया गया था। Meta (2026) के अनुसार, React Native पर 70% नए प्रोजेक्ट Touchable घटकों के बजाय Pressable का उपयोग करते हैं। Pressable Touchable की मुख्य समस्या को हल करता है — खंडित API और विभिन्न प्रभावों के लिए घटकों के बीच स्विच करने की आवश्यकता।

Pressable का दर्शन

TouchableOpacity के विपरीत, जहाँ दबाव प्रभाव निर्धारित है (अपारदर्शिता परिवर्तन), Pressable एक फ़ंक्शन प्रदान करता है जो वर्तमान अवस्था प्राप्त करता है। डेवलपर तय करता है कि दबाव पर दृश्य रूप से कैसे प्रतिक्रिया देनी है: रंग, आकार, छाया या प्रभावों का संयोजन बदलना। यह UX पर पूर्ण नियंत्रण देता है।

Pressable की अवस्थाएँ: pressed, hovered, focused

Pressable तीन अंतःक्रिया अवस्थाएँ परिभाषित करता है: pressed (स्क्रीन पर उंगली), hovered (वेब/TV पर तत्व पर कर्सर), focused (कीबोर्ड फ़ोकस में तत्व)। प्रत्येक अवस्था संबंधित कॉलबैक को ट्रिगर करती है और शैली फ़ंक्शन और चाइल्ड रेंडर फ़ंक्शन को दी जाती है।

अवस्थाशर्तसामान्य प्रतिक्रिया
pressedस्क्रीन पर उंगली या क्लिक दबा हुआअपारदर्शिता, आकार या पृष्ठभूमि रंग परिवर्तन
hoveredतत्व पर कर्सर (वेब, TV)हाइलाइट, छाया, रेखांकन
focusedकीबोर्ड फ़ोकस में तत्वरूपरेखा, सीमा, रंग परिवर्तन

महत्वपूर्ण: hovered और focused केवल पॉइंटर समर्थन वाले प्लेटफ़ॉर्म (वेब, Android TV, Apple TV) पर काम करते हैं। मोबाइल उपकरणों पर केवल pressed उपलब्ध है। क्रॉस-प्लेटफ़ॉर्म अनुप्रयोगों के लिए, इस सीमा को ध्यान में रखते हुए दृश्य प्रतिक्रियाएँ डिज़ाइन करें।

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 और कॉलबैक

Pressable API में चार मुख्य कॉलबैक शामिल हैं: onPress (रिलीज़ के साथ पूर्ण दबाव), onLongPress (लंबा दबाव), onPressIn (स्पर्श की शुरुआत) और onPressOut (स्पर्श का अंत)। onPressIn और onPressOut का संयोजन कस्टम एनिमेशन बनाने की अनुमति देता है।

अतिरिक्त प्रॉप्स: delayLongPress (लंबे दबाव में देरी, डिफ़ॉल्ट 500 ms), pressRetentionOffset (वह क्षेत्र जिसके बाहर दबाव रद्द हो जाता है), android_ripple (Android पर रिपल प्रभाव)। नोट: Ripple केवल Android 5+ पर काम करता है।

js
<Pressable
  onPress={() => console.log('दबाया गया')}
  onLongPress={() => console.log('लंबा दबाव')}
  onPressIn={() => console.log('उंगली नीचे')}
  onPressOut={() => console.log('उंगली ऊपर')}
  delayLongPress={300}
  android_ripple={{ color: 'rgba(0,0,0,0.1)', borderless: false }}
  style={styles.button}>
  <Text>Press me</Text>
</Pressable>

onPress केवल तभी कॉल किया जाता है जब उंगली घटक क्षेत्र के अंदर उठाई जाती है (pressRetentionOffset को ध्यान में रखते हुए)। यदि उपयोगकर्ता अपनी उंगली सीमाओं से बाहर ले जाता है, तो onPress ट्रिगर नहीं होता है, जिससे गलत दबाव रुकते हैं। onPressOut रिलीज़ होने पर किसी भी स्थिति में कॉल किया जाता है।

hitSlop: स्पर्श क्षेत्र का विस्तार

hitSlop एक Pressable प्रॉप है जो दृश्य घटक सीमाओं से परे स्पर्श क्षेत्र का विस्तार करता है। यह छोटे तत्वों के लिए महत्वपूर्ण है: आइकन, चेकबॉक्स, रेडियो बटन। Apple HIG न्यूनतम स्पर्श लक्ष्य आकार 44×44 पॉइंट की अनुशंसा करता है। hitSlop दृश्य आकार बदले बिना इस आवश्यकता को पूरा करने की अनुमति देता है।

hitSlop एक ऑब्जेक्ट { top, bottom, left, right } या सभी पक्षों के लिए एक संख्या स्वीकार करता है। मान तार्किक पिक्सेल (dp/pt) में निर्दिष्ट किए जाते हैं। 24×24 आइकन के लिए, 44×44 स्पर्श लक्ष्य प्राप्त करने के लिए प्रत्येक पक्ष पर कम से कम 10–12 का hitSlop अनुशंसित है।

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

pressRetentionOffset — hitSlop का उल्टा: उस क्षेत्र को परिभाषित करता है जहाँ उपयोगकर्ता दबाव रद्द किए बिना घटक सीमाओं से बाहर जा सकता है। डिफ़ॉल्ट रूप से hitSlop के बराबर है। यदि आपको सीमाओं से बाहर जाने पर दबाव बनाए रखने की आवश्यकता है, तो pressRetentionOffset बढ़ाएँ।

Pressable बनाम Touchable: कब स्विच करें

Pressable बनाम Touchable — स्पर्श संभालने के लिए घटक चुनते समय एक मुख्य प्रश्न। TouchableOpacity, TouchableHighlight और TouchableWithoutFeedback पुराने घटक हैं जिन्हें हटाया नहीं जाएगा लेकिन नई सुविधाएँ नहीं मिलेंगी। Meta नए प्रोजेक्ट्स के लिए Pressable की अनुशंसा करता है।

Pressable के मुख्य लाभ: सभी प्रकार के प्रभावों के लिए एकीकृत API, कस्टम शैलीकरण के लिए pressed अवस्था तक पहुँच, hovered/focused अवस्था समर्थन, hitSlop और pressRetentionOffset, बिना अतिरिक्त कॉन्फ़िगरेशन के onLongPress कॉलबैक। TouchableOpacity केवल सरल अपारदर्शिता परिवर्तनों के लिए उपयुक्त है।

परिदृश्यTouchablePressable
सरल दबावTouchableOpacityPressable + style में opacity
पृष्ठभूमि हाइलाइटTouchableHighlightPressable + backgroundColor
कोई दृश्य प्रभाव नहींTouchableWithoutFeedbackPressable खाली style के साथ
लंबा दबावकिसी भी Touchable पर onLongPressPressable पर onLongPress
कस्टम एनिमेशनAnimated + onPressIn/OutPressable + useAnimatedStyle
Android पर RippleTouchableNativeFeedbackPressable + android_ripple

Pressable उपयोग उदाहरण

Pressable न्यूनतम कोड के साथ जटिल इंटरैक्टिव तत्व बनाने की अनुमति देता है। नीचे दबाव पर आकार परिवर्तन और Android पर रिपल प्रभाव वाले एक एनिमेटेड बटन का उदाहरण है। ऐसा बटन TouchableOpacity + Animated संयोजन को बदल देता है।

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>
  );
};

महत्वपूर्ण: Pressable में एनिमेशन के लिए useNativeDriver: true का उपयोग करें। यह एनिमेशन को मूल थ्रेड पर स्थानांतरित करता है, तेज़ दबावों पर फ्रेम ड्रॉप को रोकता है। transform और opacity के लिए native ड्राइवर सभी प्लेटफ़ॉर्म पर समर्थित है।

अक्सर पूछे जाने वाले प्रश्न

क्या मैं कोड बदले बिना TouchableOpacity के बजाय Pressable का उपयोग कर सकता हूँ?

नहीं, Pressable का API अलग है। TouchableOpacity दबाव पर स्वचालित रूप से अपारदर्शिता लागू करता है। Pressable को अवस्था फ़ंक्शन के माध्यम से स्पष्ट शैली निर्दिष्ट करने की आवश्यकता होती है। प्रतिस्थापन सरल है: style={({ pressed }) => [{ opacity: pressed ? 0.5 : 1 }]} पास करें।

Material Design जैसा रिपल प्रभाव कैसे बनाएँ?

android_ripple प्रॉप का उपयोग ऑब्जेक्ट { color, borderless } के साथ करें। रिपल का रंग rgba प्रारूप में निर्दिष्ट किया जाता है। गोल बटन के लिए borderless: true का उपयोग करें। Ripple केवल Android 5+ पर काम करता है। iOS पर कस्टम एनिमेशन का उपयोग करें।

तेज़ स्क्रॉल करने पर onPress क्यों नहीं चलता?

Pressable में स्क्रॉल करते समय आकस्मिक दबावों के खिलाफ अंतर्निर्मित सुरक्षा है। यदि उपयोगकर्ता सूची स्क्रॉल करता है, तो onPress कॉल नहीं किया जाता है। इस व्यवहार को pressRetentionOffset और delayPressIn के माध्यम से कॉन्फ़िगर किया जा सकता है।

Pressable के साथ लंबे दबाव को कैसे ट्रैक करें?

onLongPress प्रॉप का उपयोग करें — लंबे दबाव के लिए अंतर्निर्मित समर्थन। देरी delayLongPress (डिफ़ॉल्ट 500 ms) के माध्यम से कॉन्फ़िगर की जाती है। संदर्भ मेनू और ड्रैग-एंड-ड्रॉप के लिए, onLongPress को onPressIn के साथ जोड़ें।

क्या Pressable कीबोर्ड नेविगेशन का समर्थन करता है?

हाँ, Pressable Android TV, Apple TV और वेब पर कीबोर्ड नेविगेशन के लिए focused अवस्था का समर्थन करता है। फ़ोकस प्रदर्शित करने के लिए { focused } के माध्यम से शैलीकरण का उपयोग करें। मोबाइल उपकरणों पर, focused अवस्था प्रासंगिक नहीं है।

सारांश

  • Pressable — स्पर्श संभालने के लिए एक सार्वभौमिक React Native घटक, TouchableOpacity, TouchableHighlight और TouchableWithoutFeedback को बदलता है
  • अवस्थाएँ pressed, hovered, focused शैली फ़ंक्शन में पास की जाती हैं, जिससे प्रत्येक परिदृश्य के लिए प्रतिक्रिया को अनुकूलित किया जा सकता है
  • hitSlop दृश्य आकार बदले बिना स्पर्श लक्ष्य को 44×44 पॉइंट तक बढ़ाता है, छोटे तत्वों पर UX में सुधार करता है
  • API में onPress, onLongPress, onPressIn, onPressOut शामिल हैं जिनमें delayLongPress के माध्यम से कॉन्फ़िगर करने योग्य देरी है
  • android_ripple अनुकूलन योग्य रंग और आकार के साथ Android 5+ पर Material Design रिपल प्रभाव जोड़ता है
  • Touchable से माइग्रेशन में स्वचालित प्रभावों को अवस्था फ़ंक्शन के माध्यम से स्पष्ट शैलीकरण से बदलना शामिल है
  • Animated + Pressable प्रदर्शन के लिए useNativeDriver के साथ सहज दबाव एनिमेशन बनाते हैं

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें