React Native-এ Text কম্পোনেন্ট হল স্ক্রিনে টেক্সট প্রদর্শনের একমাত্র উপায়, ওয়েবের বিপরীতে যেখানে বিভিন্ন ট্যাগ (p, span, h1-h6) ব্যবহার করা হয়। Text ক্যাসকেডিং স্টাইল ইনহেরিটেন্স, টাচ ইভেন্ট হ্যান্ডলিং এবং স্বয়ংক্রিয় লাইন র্যাপিংয়ের জন্য নেস্টিং সমর্থন করে। React Native Docs, 2024 অনুসারে, View-এর পর Text দ্বিতীয় সর্বাধিক ব্যবহৃত কম্পোনেন্ট। কম্পোনেন্টটি iOS-এ নেটিভ UILabel এবং Android-এ TextView হিসেবে রেন্ডার হয়, যা ফন্ট এবং অ্যাক্সেসিবিলিটির সঠিক কার্যকারিতা নিশ্চিত করে।
মূল পয়েন্ট
Text হল টেক্সট কন্টেন্ট প্রদর্শনের জন্য একটি React Native কম্পোনেন্ট। ওয়েব ডেভেলপমেন্টের বিপরীতে, যেখানে টেক্সটের জন্য অনেক সিম্যান্টিক ট্যাগ রয়েছে, React Native-এ সমস্ত টেক্সট এলিমেন্ট Text-এর মাধ্যমে তৈরি করা হয়। কম্পোনেন্টটি সরল টেক্সট এবং নেস্টেড Text ও স্টাইলাইজড খণ্ড সহ জটিল কাঠামো উভয়ই প্রদর্শন করতে পারে।
Text স্বয়ংক্রিয়ভাবে লাইন র্যাপিং পরিচালনা করে, ফন্ট ফ্যামিলি, সাইজ, কালার এবং অ্যালাইনমেন্ট নিয়ন্ত্রণ করে। কম্পোনেন্টটি টাচ ইভেন্ট (onPress) সমর্থন করে, যা অতিরিক্ত র্যাপার ছাড়াই ক্লিকযোগ্য লিংক তৈরি করতে দেয়। একটি গুরুত্বপূর্ণ সীমাবদ্ধতা: Text সরাসরি View-এর ভিতরে নেস্ট করা যায় না — শুধুমাত্র অন্যান্য Text কম্পোনেন্টের ভিতরে বা সরাসরি চাইল্ড হিসেবে।
React Native Nested Text, 2024 অনুসারে, নেস্টেড Text কম্পোনেন্টগুলি প্যারেন্ট থেকে স্টাইল ইনহেরিট করে। এটি উপরের স্তরে একটি বেস স্টাইল সেট করতে এবং নির্দিষ্ট খণ্ডের জন্য পৃথক প্রপার্টি ওভাররাইড করতে দেয় — ওয়েবে span-এর CSS-এর সাথে কাজ করার অনুরূপ।
Text কম্পোনেন্ট প্রদর্শন, আচরণ এবং অ্যাক্সেসিবিলিটি নিয়ন্ত্রণের জন্য প্রপসের একটি সেট প্রদান করে। মূল বিভাগ: স্টাইল প্রপস (ফন্ট, সাইজ, কালার, অ্যালাইনমেন্ট), ডিসপ্লে প্রপস (numberOfLines, lineBreakMode) এবং ইন্টারঅ্যাকটিভ প্রপস (onPress, onLongPress)।
numberOfLines প্রদর্শিত লাইনের সংখ্যা সীমিত করে, শেষে উপবৃত্ত যোগ করে। ellipsizeMode উপবৃত্তের অবস্থান নিয়ন্ত্রণ করে (head, middle, tail, clip)। adjustsFontSizeToFit নির্ধারিত সীমার মধ্যে টেক্সট ফিট করতে স্বয়ংক্রিয়ভাবে ফন্ট সাইজ কমায়। lineBreakMode নির্ধারণ করে কিভাবে numberOfLines-এর বাইরে টেক্সট কাটা হবে।
Text স্পর্শ হ্যান্ডলিংয়ের জন্য onPress এবং onLongPress সমর্থন করে। এটি TouchableOpacity ব্যবহার না করেই টেক্সট লিংক তৈরি করতে দেয়। onTextLayout রেন্ডারিংয়ের পরে টেক্সট লেআউট সম্পর্কে তথ্য ফেরত দেয় — অ্যানিমেশন এবং পজিশনিংয়ের জন্য দরকারী।
iOS-এ, disabled (টেক্সট নিষ্ক্রিয় করে), selectable (নির্বাচন সক্ষম করে), dataDetectorTypes (লিংক, ফোন, ঠিকানা স্বয়ংক্রিয় সনাক্তকরণ) উপলব্ধ। Android-এ, selectable (textSelectable-এর মাধ্যমে) এবং includeFontPadding (অতিরিক্ত প্যাডিং সরায়) উপলব্ধ।
যদিও Text দৃশ্যত HTML ট্যাগ p এবং span-এর মতো দেখতে, আর্কিটেকচারাল পার্থক্যগুলি গুরুত্বপূর্ণ। React Native-এ সিম্যান্টিক টেক্সট এলিমেন্ট সহ DOM মডেল নেই — সমস্ত টেক্সট নোড বিভিন্ন প্রপস সহ একটি একক Text কম্পোনেন্টের মাধ্যমে পরিচালিত হয়।
| বৈশিষ্ট্য | Text (React Native) | p / span (HTML) |
|---|---|---|
| নেস্টিং | Text-এর ভিতরে Text — স্টাইল ইনহেরিটেন্স | p-তে p থাকতে পারে না; span p-এর ভিতরে |
| ডিফল্ট মার্জিন | কোনো ডিফল্ট মার্জিন নেই | p-তে margin-block-start/end আছে |
| লাইন র্যাপিং | কন্টেইনারের ভিতরে স্বয়ংক্রিয় | p — ব্লক, span — ইনলাইন |
| onPress হ্যান্ডলিং | অন্তর্নির্মিত সমর্থন | অতিরিক্ত র্যাপার প্রয়োজন |
| স্টাইল ইনহেরিটেন্স | হ্যাঁ, প্যারেন্ট Text থেকে | হ্যাঁ, CSS ক্যাসকেড |
মূল পার্থক্য হল Text নেস্টিংয়ের মাধ্যমে স্টাইল ইনহেরিটেন্স। যদি একটি বাইরের Text-এর fontSize: 18 এবং color: blue থাকে, তাহলে সমস্ত নেস্টেড Text কম্পোনেন্ট এই স্টাইলগুলি ইনহেরিট করে। যেকোনো প্রপ ভিতরের Text-এ একটি নির্দিষ্ট মান সেট করে ওভাররাইড করা যেতে পারে। এটি কোড বাঁচায় এবং কাঠামো পরিষ্কার রাখে।
Text টাইপোগ্রাফির জন্য বেশিরভাগ CSS প্রপার্টি সমর্থন করে: fontFamily, fontSize, fontWeight, fontStyle, color, letterSpacing, lineHeight, textAlign, textDecorationLine, textTransform। React Native-এ, ফন্টগুলি @font-face-এর মাধ্যমে নয়, প্ল্যাটফর্ম স্তরে সংযুক্ত হয়।
কাস্টম ফন্ট ব্যবহার করতে, সেগুলিকে assets/fonts ফোল্ডারে যোগ করতে হবে এবং react-native.config.js-এ উল্লেখ করতে হবে। অ্যাপ্লিকেশন পুনর্নির্মাণের পরে, ফন্টটি fontFamily-এর মাধ্যমে উপলব্ধ হয়। React Native সরাসরি ওয়েব ফন্ট (Google Fonts) সমর্থন করে না — .ttf বা .otf ফাইল ডাউনলোড করা প্রয়োজন।
Text-এ ইনহেরিটেন্স মেকানিজম CSS-এর থেকে আলাদা। স্টাইলগুলি কেবল Text থেকে নেস্টেড Text-এ যায়, কিন্তু View থেকে Text-এ যায় না। পুরো অ্যাপ্লিকেশনের জন্য ফন্ট সেট করতে, Text কম্পোনেন্টের defaultProps বা কাস্টম র্যাপার কম্পোনেন্ট ব্যবহার করা হয়।
<Text style={{ fontSize: 18, color: '#333' }}>
This text is 18px and color #333
<Text style={{ fontWeight: 'bold', color: '#007AFF' }}>
bold and blue
</Text>
back to #333 color
</Text>
এই উদাহরণে, বাইরের Text fontSize: 18 এবং color: #333 সেট করে। ভিতরের Text fontSize (18) ইনহেরিট করে, কিন্তু fontWeight-কে bold এবং color-কে #007AFF-এ ওভাররাইড করে। বাইরের Text কেবল তার নিজস্ব স্টাইলগুলি ইনহেরিট করে। এটি HTML-এ নেস্টেড span-এর কাজ করার সঠিক সাদৃশ্য।
React Native-এ Text-এর দুটি সাধারণ ব্যবহারের ক্ষেত্রে দেখা যাক: নেস্টিংয়ের সাথে টেক্সট ফর্ম্যাটিং এবং লাইন সীমা সহ ক্লিকযোগ্য কম্পোনেন্ট তৈরি করা।
এই উদাহরণে, Text হাইলাইট করা উপাদানগুলির সাথে মাল্টিলাইন টেক্সট প্রদর্শনের জন্য ব্যবহৃত হয়: শিরোনাম, তারিখ এবং লিংক সহ বিষয়বস্তু।
const NewsCard = ({ title, date, content }) => (
<View style={styles.card}>
<Text style={styles.title}>{title}</Text>
<Text style={styles.date}>{date}</Text>
<Text style={styles.content}>
{content}
{' ' }
<Text
style={styles.link}
onPress={() => Linking.openURL(url)}
>
Read more
</Text>
</Text>
</View>
);
এই কাঠামোতে তিনটি স্বাধীন Text কম্পোনেন্ট (শিরোনাম, তারিখ, বিষয়বস্তু) রয়েছে, প্রতিটি নিজস্ব স্টাইল সহ। বিষয়বস্তু Text-এর ভিতরে, লিংকের জন্য onPress সহ আরেকটি Text নেস্টেড আছে। এই প্যাটার্নটি নিউজ ফিড, ব্লগ এবং মন্তব্যের জন্য ব্যবহৃত হয়।
উপবৃত্ত সহ টেক্সট প্রিভিউ প্রদর্শনের জন্য, numberOfLines ব্যবহার করা হয়। এটি প্রোডাক্ট কার্ড এবং আর্টিকেল তালিকার জন্য একটি স্ট্যান্ডার্ড প্যাটার্ন।
<Text
numberOfLines={2}
ellipsizeMode="tail"
style={styles.preview}
>
{longDescription}
</Text>
numberOfLines = 2 প্রপার্টি টেক্সটকে দুই লাইনে সীমাবদ্ধ করে। যদি টেক্সট লম্বা হয়, React Native স্বয়ংক্রিয়ভাবে দ্বিতীয় লাইনের শেষে উপবৃত্ত যোগ করে। ellipsizeMode: 'tail' প্যারামিটার নির্দিষ্ট করে যে উপবৃত্ত শেষে থাকবে (head, middle, এবং clipও উপলব্ধ)।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
React Native ক্রস-প্ল্যাটফর্ম সামঞ্জস্যের জন্য ন্যূনতম সেট কম্পোনেন্ট ব্যবহার করে। অনেক সিম্যান্টিক HTML ট্যাগের পরিবর্তে, বিভিন্ন স্টাইল সহ একটি একক Text ব্যবহার করা হয়। এটি একটি কোডবেস থেকে উভয় প্ল্যাটফর্মে রেন্ডারিং সহজ করে।
হ্যাঁ, Text স্পর্শ হ্যান্ডলিংয়ের জন্য onPress এবং onLongPress সমর্থন করে। তবে, ভিজুয়াল ফিডব্যাক (প্রেস হাইলাইটিং) সহ বাটনের জন্য, Text-এর ভিতরে TouchableOpacity বা Pressable ব্যবহার করা ভাল। Text.onPress ডিফল্টভাবে ভিজুয়াল প্রেস ইঙ্গিত প্রদান করে না।
Text তার কন্টেইনারের ভিতরে শুধুমাত্র লম্বা লাইন স্বয়ংক্রিয়ভাবে র্যাপ করে। যদি টেক্সট র্যাপ না হয়, তাহলে চেক করুন: প্যারেন্ট View-এর কি প্রস্থ সীমা আছে, স্টাইলে কি nowrap সেট করা আছে, এবং numberOfLines কি উপলব্ধ লাইনের সংখ্যা অতিক্রম করছে না।
fontWeight: 'bold' সহ নেস্টেড Text ব্যবহার করুন বা এই স্টাইল সহ একটি কম্পোনেন্টে টেক্সট র্যাপ করুন। আপনি আরও বোল্ড লুকের জন্য fontWeight: '700' বা '800' ব্যবহার করতে পারেন। পুরুত্ব ডিভাইসে সংশ্লিষ্ট ফন্ট ফ্যামিলির উপলব্ধতার উপর নির্ভর করে।
না, Text শুধুমাত্র অন্যান্য Text কম্পোনেন্ট বা স্ট্রিং ধারণ করতে পারে। Image Text-এর চাইল্ড হতে পারে না। আইকন সহ টেক্সট প্রদর্শনের জন্য, Text এবং Image কে সহোদর এলিমেন্ট হিসেবে View ব্যবহার করুন বা ইনলাইন ইমেজ সমর্থন সহ কম্পোনেন্ট ব্যবহার করুন।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন