React Native میں View جزو یوزر انٹرفیس کا بنیادی تعمیراتی بلاک ہے، جو موبائل پلیٹ فارمز کے لیے HTML div عنصر کے مشابہ ہے۔ View کسی بھی گہرائی میں نیسٹنگ کو سپورٹ کرتا ہے، Flexbox کے ذریعے چائلڈ عناصر کی ترتیب کو منظم کرتا ہے اور ٹچ ایونٹس کو ہینڈل کرتا ہے۔ React Native Docs, 2024 کے مطابق، View ایپلیکیشنز میں سب سے زیادہ استعمال ہونے والا جزو ہے — عملی طور پر ہر اسکرین نیسٹڈ View کنٹینرز سے بنائی جاتی ہے۔ یہ جزو iOS پر مقامی UIView اور Android پر android.view.View میں رینڈر ہوتا ہے، جو مقامی کارکردگی اور رسائی کو یقینی بناتا ہے۔
اہم نکات
View ایک بنیادی React Native جزو ہے جو دوسرے اجزاء کے لیے کنٹینر کے طور پر کام کرتا ہے۔ یہ StyleSheet کے ذریعے اسٹائلنگ، Flexbox کے ذریعے لے آؤٹ، ٹچ ہینڈلنگ، اینیمیشن اور ٹرانسفارمیشن کو سپورٹ کرتا ہے۔ View مقامی کنٹینر عناصر پر ایک تجرید ہے: iOS پر UIView اور Android پر android.view.View۔
React Native میں HTML عناصر استعمال کرنا ممکن نہیں ہے — اس کے بجائے، تمام لے آؤٹ View سے بنائے جاتے ہیں۔ یہاں تک کہ Text اور Image بھی عام طور پر پوزیشننگ کے لیے View میں لپیٹے جاتے ہیں۔ جزو خالی (صرف ایک کنٹینر) ہو سکتا ہے یا کسی بھی گہرائی میں کسی بھی تعداد میں چائلڈ عناصر پر مشتمل ہو سکتا ہے۔
View ایک ہی JavaScript کوڈبیس سے دونوں پلیٹ فارمز پر رینڈرنگ کو سپورٹ کرتا ہے۔ Flexbox خصوصیات، مارجن، بیک گراؤنڈ، شیڈوز اور بارڈرز iOS اور Android پر یکساں طور پر کام کرتے ہیں۔ پلیٹ فارم کے فرق کم سے کم ہیں — مثال کے طور پر، iOS پر شیڈوز shadowColor/shadowOffset استعمال کرتی ہیں، جبکہ Android پر elevation استعمال ہوتی ہے۔
React Native Layout Docs, 2024 کے مطابق، View موبائل آلات کے لیے بہتر بنایا گیا ہے: یہ فلیٹن آپٹیمائزیشن کے دوران اضافی مقامی ویوز نہیں بناتا اور والدین کے اسٹائل تبدیل ہونے پر جھرن والی اپ ڈیٹس کو صحیح طریقے سے ہینڈل کرتا ہے۔
View جزو میں ظاہری شکل، لے آؤٹ اور انٹرایکٹیویٹی کو کنٹرول کرنے کے لیے props کا ایک بھرپور سیٹ ہے۔ تمام props کئی زمروں میں تقسیم ہوتے ہیں: اسٹائل props، ٹچ ایونٹس، رسائی اور پلیٹ فارم کے لیے مخصوص خصوصیات۔ آئیے اہم گروپس کا جائزہ لیتے ہیں۔
View موبائل پلیٹ فارمز کے لیے تمام معیاری CSS خصوصیات کو سپورٹ کرتا ہے۔ اہم میں شامل ہیں: پوزیشننگ کے لیے flexDirection، justifyContent، alignItems؛ فاصلے کے لیے margin، padding؛ ظاہری شکل کے لیے backgroundColor، borderRadius؛ سائز کے لیے width، height، maxHeight۔
View onStartShouldSetResponder، onMoveShouldSetResponder اور onResponderGrant props کے ذریعے ٹچ ایونٹس کو ہینڈل کر سکتا ہے۔ یہ ایونٹس لائبریری کے بغیر کسٹم جیسچرز لاگو کرنے کی اجازت دیتے ہیں۔ معیاری ٹیپ کے لیے، onTouchStart، onTouchEnd اور onPress (Pressable یا TouchableOpacity کے ذریعے) استعمال ہوتے ہیں۔
iOS پر شیڈوز کے لیے shadowColor، shadowOffset، shadowOpacity، shadowRadius دستیاب ہیں۔ Android پر یہ خصوصیات نظر انداز کی جاتی ہیں — اس کے بجائے elevation (کارڈ جیسی شیڈو) استعمال ہوتی ہے۔ onLayout کال بیک اس وقت متحرک ہوتا ہے جب View کے طول و عرض تبدیل ہوتے ہیں، جو انکولی لے آؤٹ کے لیے مفید ہے۔
Flexbox React Native میں واحد لے آؤٹ میکانزم ہے (ویب کے برعکس، جہاں Grid اور Float دستیاب ہیں)۔ تمام عناصر کی پوزیشننگ View جزو کی Flexbox خصوصیات کے ذریعے کی جاتی ہے۔ ڈیفالٹ طور پر، View میں flexDirection column پر سیٹ ہوتا ہے، ویب کی طرح row نہیں، جو موبائل اسکرینز کی عمودی سمت سے مطابقت رکھتا ہے۔
flexDirection مرکزی محور کی سمت کا تعین کرتا ہے: column (ڈیفالٹ) یا row۔ justifyContent مرکزی محور کے ساتھ تقسیم کو کنٹرول کرتا ہے (flex-start، center، space-between)۔ alignItems — کراس محور کے ساتھ (stretch — ڈیفالٹ ویلیو)۔ flex چائلڈ عنصر کے لیے دستیاب جگہ کا تناسب بتاتا ہے۔
import React from 'react';
import { View, Text, StyleSheet } from 'react-native';
const CardLayout = () => (
<View style={styles.card}>
<View style={styles.row}>
<View style={styles.avatar} />
<View style={styles.content}>
<Text style={styles.name}>John Doe</Text>
<Text style={styles.role}>Developer</Text>
</View>
</View>
</View>
);
مثال ایک عام ساخت دکھاتی ہے: ایک بیرونی View — کارڈ، ایک اندرونی row — اوتار اور ٹیکسٹ بلاک کے ساتھ ایک قطار، content — نام اور کردار کے ساتھ ایک کالم۔ یہ نیسٹڈ View ساخت کسی بھی React Native اسکرین کے لیے معیاری ہے۔
اگرچہ View تصوراتی طور پر HTML div سے ملتا جلتا ہے، ویب سے React Native کوڈ پورٹ کرتے وقت سمجھنے کے لیے اہم فرق موجود ہیں۔ یہ فرق رینڈرنگ، اسٹائلز اور ڈیفالٹ رویے سے متعلق ہیں۔
| خصوصیت | View (React Native) | div (HTML) |
|---|---|---|
| ڈیفالٹ flexDirection | column | row (block سیاق و سباق میں) |
| width/height | ڈیفالٹ طور پر والدین کا 100% | مواد کی بنیاد پر auto |
| اسکرولنگ | تعاون یافتہ نہیں (ScrollView درکار ہے) | overflow: auto/scroll |
| شیڈوز | iOS: shadow*، Android: elevation | box-shadow |
| ایونٹ ہینڈلنگ | Responder نظام | DOM ایونٹس |
| مقامی رینڈرنگ | UIView / android.view.View | DOM عنصر |
سب سے اہم فرق ڈیفالٹ طور پر flexDirection: column ہے۔ اس کا مطلب ہے کہ واضح کنفیگریشن کے بغیر، چائلڈ عناصر افقی طور پر نہیں بلکہ عمودی طور پر ترتیب دیئے جاتے ہیں۔ دوسرا فرق: View کی چوڑائی اور اونچائی ڈیفالٹ طور پر والدین کی تمام دستیاب جگہ بھرنے کے لیے پھیل جاتی ہے (CSS میں width: 100% کے مشابہ)۔
آئیے React Native ایپلیکیشنز میں View کے استعمال کی دو حقیقی مثالیں دیکھتے ہیں: پوری اسکرین پر مواد کو مرکز میں رکھنا اور ایک ریسپانسیو کارڈ گرڈ بنانا۔ دونوں پیٹرن ہر پروجیکٹ میں ظاہر ہوتے ہیں۔
خالی حالت بنانے کے لیے، flex: 1 اور دونوں محوروں پر مرکز کے ساتھ View استعمال کیا جاتا ہے۔ یہ لوڈنگ اسکرینز، خرابی کی حالتوں اور خالی فہرستوں کے لیے ایک معیاری پیٹرن ہے۔
const EmptyState = ({ message }) => (
<View style={styles.container}>
<Text style={styles.icon}>{icon}</Text>
<Text style={styles.message}>{message}</Text>
</View>
);
const styles = StyleSheet.create({
container: { flex: 1, justifyContent: 'center', alignItems: 'center' },
icon: { fontSize: 48 },
message: { fontSize: 16, color: '#666', marginTop: 16 },
});
flex: 1 والے View میں justifyContent: center اور alignItems: center کا امتزاج مواد کو پوری اسکرین پر دونوں محوروں پر مرکز میں رکھتا ہے۔ React Native میں View استعمال کرنے کا یہ سب سے عام پیٹرن ہے۔
مصنوعات یا مضامین کے دو کالم دکھانے کے لیے، flexDirection: row، flexWrap: wrap اور مقررہ چوڑائی والے چائلڈ View استعمال کیے جاتے ہیں۔ یہ پیٹرن React Native میں CSS Grid کی جگہ لیتا ہے۔
const ProductGrid = ({ products }) => (
<View style={styles.grid}>
{products.map((product) => (
<View key={product.id} style={styles.card}>
<Image source={{ uri: product.image }} />
<Text>{product.name}</Text>
</View>
))}
</View>
);
const styles = StyleSheet.create({
grid: {
flexDirection: 'row',
flexWrap: 'wrap',
justifyContent: 'space-between',
},
card: { width: '48%', marginBottom: 16 },
});
اس مثال میں، flexWrap: wrap والا بیرونی View CSS Grid کے مشابہ کام کرتا ہے۔ ہر کارڈ چوڑائی کا 48% لیتا ہے، کالموں کے درمیان خلا چھوڑتا ہے۔ یہ کیٹلاگ اور مواد کی فیڈز کے لیے ایک عام پیٹرن ہے۔
اکثر پوچھے گئے سوالات
View میں ڈیفالٹ طور پر flexDirection: column ہے (HTML میں flex کنٹینر کی طرح row نہیں)، اسکرولنگ سپورٹ نہیں کرتا، چوڑائی ڈیفالٹ طور پر والدین کے 100% تک پھیلتی ہے، اور شیڈوز iOS پر shadow* خصوصیات اور Android پر elevation کے ذریعے سیٹ کی جاتی ہیں۔
ہاں، View onTouchStart، onTouchEnd اور Responder نظام کے ذریعے ٹچ ایونٹ ہینڈلنگ کو سپورٹ کرتا ہے۔ تاہم، بٹنوں کے لیے TouchableOpacity، Pressable یا Button استعمال کرنا بہتر ہے — یہ بصری فیڈ بیک فراہم کرتے ہیں اور رسائی API کے مطابق ہیں۔
ضروری نہیں۔ React Native View flattening کے ذریعے رینڈرنگ کو بہتر بناتا ہے — اسٹائل اور ایونٹس کے بغیر اضافی View مقامی درخت سے ہٹا دیئے جاتے ہیں۔ تاہم، کوڈ کی پڑھنے کی اہلیت کے لیے، View کو منطقی انٹرفیس بلاکس کے لیے کنٹینر کے طور پر استعمال کرنا بہتر ہے۔
borderRadius کو چوڑائی اور اونچائی کے نصف کے برابر سیٹ کریں (مثال کے طور پر، width: 50، height: 50، borderRadius: 25)۔ اگر چوڑائی اور اونچائی برابر ہوں تو View ایک دائرہ بن جاتا ہے۔ یہ اوتار کے لیے معیاری پیٹرن ہے۔
opacity کو 0 سے 1 کے درمیان سیٹ کریں (مثال کے طور پر، opacity: 0.5)۔ آپ RGBA کے ساتھ backgroundColor بھی استعمال کر سکتے ہیں (backgroundColor: 'rgba(0,0,0,0.5)')۔ فرق یہ ہے کہ opacity پورے کنٹینر اور اس کے مواد پر لاگو ہوتی ہے، جبکہ RGBA صرف پس منظر پر لاگو ہوتی ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔