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 অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।

প্রকল্প নিয়ে আলোচনা করুন

আরও পড়ুন