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
کوئی بصری اثر نہیںTouchableWithoutFeedbackخالی style کے ساتھ Pressable
لمبا دباؤکسی بھی 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 اور Web پر کی بورڈ نیویگیشن کے لیے 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 ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں