React Native میں ScrollView کمپونینٹ ایک کنٹینر ہے جو اسکرین کے سائز سے بڑھ کر مواد کو اسکرول کرنے کی اجازت دیتا ہے۔ FlatList کے برعکس، ScrollView تمام مواد کو ایک بار میں رینڈر کرتا ہے، جو ڈیٹا کی چھوٹی مقداروں، فارمز اور معلوم اونچائی والی اسکرینوں کے لیے بہترین ہے۔ React Native Docs، 2024 کے مطابق، ScrollView عمودی اور افقی اسکرولنگ، onScroll ایونٹ، پروگراماتی پوزیشن کنٹرول اور زوم جیسچرز کو سپورٹ کرتا ہے۔ یہ کمپونینٹ iOS پر مقامی UIScrollView اور Android پر ScrollView میں رینڈر ہوتا ہے۔
اہم نکات
ScrollView ایک React Native کمپونینٹ ہے جو اپنے مواد کو اسکرول ایبل کنٹینر میں لپیٹتا ہے۔ اگر مواد اسکرین کی حدود سے باہر نکل جائے تو صارف عمودی یا افقی طور پر اسکرول کر سکتا ہے۔ ScrollView ماؤنٹ ہونے پر تمام چائلڈ عناصر کو رینڈر کرتا ہے، خواہ وہ اسکرین پر نظر آئیں یا نہیں۔
FlatList کے برعکس، جو صرف نظر آنے والے عناصر کو رینڈر کرتا ہے (سست رینڈرنگ)، ScrollView فوری طور پر تمام مقامی ویوز بناتا ہے۔ یہ ScrollView کو فارمز، سیٹنگز پیجز، ایک اسکرین پر پروڈکٹ کارڈز کے لیے آسان بناتا ہے — جہاں بھی چائلڈ عناصر کی تعداد کم (20-30 تک) ہو یا ان کی صحیح تعداد پہلے سے معلوم نہ ہو۔
React Native Using ScrollView، 2024 کے مطابق، ScrollView نیسٹڈ اسکرولنگ (مثلاً ScrollView کے اندر ScrollView)، کنارے پر پہنچنے پر باؤنس اثر، اسکرول انڈیکیٹرز، اسنیپ پوزیشننگ اور جیسچر ہینڈلنگ کو سپورٹ کرتا ہے۔ iOS پر، ScrollView خود بخود contentInsetAdjustmentBehavior کے ذریعے SafeArea پیڈنگ شامل کرتا ہے۔
ScrollView اسکرول رویے، ظاہری شکل اور انٹرایکٹیویٹی کو کنٹرول کرنے کے لیے خصوصیات کا ایک بھرپور سیٹ فراہم کرتا ہے۔ آئیے اہم گروپس کو دیکھتے ہیں: اسکرول کنٹرول، بصری ترتیبات، ایونٹس اور پلیٹ فارم سے متعلق خصوصیات۔
horizontal — اسکرول کی سمت عمودی (ڈیفالٹ) سے افقی میں تبدیل کرتا ہے۔ scrollEnabled — ضرورت پڑنے پر اسکرولنگ کو غیر فعال کرتا ہے۔ showsVerticalScrollIndicator اور showsHorizontalScrollIndicator اسکرول انڈیکیٹرز کے ڈسپلے کو کنٹرول کرتے ہیں۔ bounces (iOS) مواد کے کنارے پر پہنچنے پر باؤنس اثر کو فعال/غیر فعال کرتا ہے۔
اہم ایونٹ onScroll ہے، جو ہر اسکرول پر فائر ہوتا ہے اور nativeEvent کے ساتھ ایک آبجیکٹ پاس کرتا ہے جس میں contentOffset (موجودہ پوزیشن)، contentSize (مواد کا سائز)، layoutMeasurement (نظر آنے والے علاقے کا سائز) ہوتا ہے۔ onMomentumScrollEnd انرشیل اسکرولنگ مکمل ہونے کے بعد فائر ہوتا ہے۔ onScrollEndDrag — جب صارف اسکرین سے انگلی اٹھاتا ہے۔ یہ ایونٹس لامحدود اسکرولنگ، پیرالیکس ایفیکٹس اور سست لوڈنگ کو لاگو کرنے کے لیے استعمال ہوتے ہیں۔
ScrollView ref کے ذریعے پروگراماتی کنٹرول کے لیے طریقے فراہم کرتا ہے: scrollTo({x, y, animated}) مخصوص کوآرڈینیٹس پر اسکرول کرتا ہے، scrollToEnd({animated}) — مواد کے آخر تک اسکرول کرتا ہے، flashScrollIndicators() — عارضی طور پر اسکرول انڈیکیٹرز دکھاتا ہے۔
const scrollRef = useRef(null);
// اوپر اسکرول کریں
scrollRef.current.scrollTo({ x: 0, y: 0, animated: true });
// آخر تک اسکرول کریں
scrollRef.current.scrollToEnd({ animated: true });
اسکرول کا پروگراماتی کنٹرول اکثر چیٹس (تازہ ترین پیغام پر آٹو اسکرول)، فارمز (غلطی والے فیلڈ پر اسکرول) اور کیروسلز (پروگراماتی سوائپ) میں استعمال ہوتا ہے۔
ScrollView اور FlatList کے درمیان انتخاب React Native میں اہم آرکیٹیکچرل فیصلوں میں سے ایک ہے۔ دونوں کمپونینٹس اسکرولنگ فراہم کرتے ہیں، لیکن بنیادی طور پر مختلف رینڈرنگ حکمت عملی استعمال کرتے ہیں۔ ScrollView سب کچھ ایک بار میں رینڈر کرتا ہے، FlatList — صرف نظر آنے والے عناصر۔
| خصوصیت | ScrollView | FlatList |
|---|---|---|
| رینڈرنگ | تمام عناصر ایک بار میں | صرف نظر آنے والے + بفر |
| کارکردگی | 30+ عناصر پر گر جاتی ہے | کسی بھی تعداد میں مستحکم |
| مواد | کوئی بھی کمپونینٹ (فارمز، کارڈز) | صف سے یکساں عناصر |
| ڈیٹا کا سائز | چھوٹا اور درمیانہ (30 عناصر تک) | بڑا اور لامحدود |
| افقی اسکرول | ہاں (horizontal prop) | ہاں (horizontal) |
| سیکشنز | نہیں (جیسے ہے ویسے رینڈر) | سیکشنز کے لیے SectionList |
انتخاب کا قاعدہ: ScrollView — ان اسکرینوں کے لیے جہاں چائلڈ عناصر کی تعداد معلوم ہو اور 20-30 سے زیادہ نہ ہو (صارف پروفائل، سیٹنگز فارم، پروڈکٹ پیج)۔ FlatList — ممکنہ طور پر بہت سے عناصر والی فہرستوں کے لیے (نیوز فیڈ، پروڈکٹ کیٹلاگ، چیٹ پیغامات)۔ اگر مواد متنوع ہو (ہیڈر، فارم، کارڈ، فوٹر) — ScrollView ترجیح دی جاتی ہے کیونکہ FlatList یکساں عناصر کی توقع کرتا ہے۔
ScrollView horizontal prop کے ذریعے افقی اسکرولنگ کو سپورٹ کرتا ہے، جو اسے کیروسلز، امیج گیلریوں، ٹیبز اور افقی فہرستوں کے لیے مثالی بناتا ہے۔ pagingEnabled prop (iOS) یا snapToInterval کے ساتھ مل کر، ScrollView صفحہ پر مبنی نیویگیشن کے لیے ایک کمپونینٹ بن جاتا ہے۔
horizontal پراپرٹی اسکرول کی سمت تبدیل کرتی ہے۔ pagingEnabled (iOS) صفحہ پر مبنی اسکرولنگ کو فعال کرتا ہے، جہاں اسکرول صرف عناصر کی حدود پر رکتا ہے۔ snapToInterval دونوں پلیٹ فارمز کے لیے پکسلز میں اسنیپ مرحلہ طے کرتا ہے۔
const ImageCarousel = ({ images }) => (
<ScrollView
horizontal
pagingEnabled
showsHorizontalScrollIndicator={false}
onMomentumScrollEnd={handlePageChange}
>
{images.map((img, index) => (
<Image
key={index}
source={{ uri: img }}
style={{ width: SCREEN_WIDTH, height: 250 }}
/>
))}
</ScrollView>
);
اس کیروسل میں، pagingEnabled خود بخود ہر تصویر کی حدود میں اسکرول کو اسنیپ کرتا ہے۔ onMomentumScrollEnd موجودہ صفحہ انڈیکیٹر کو اپ ڈیٹ کرنے کی اجازت دیتا ہے۔ ایسا کیروسل مقامی طور پر چلتا ہے اور انرشیل اسکرولنگ کو سپورٹ کرتا ہے۔
غیر معیاری اسنیپ مراحل کے لیے، snapToInterval (پکسلز میں مرحلے کا سائز) اور snapToAlignment (start, center, end) استعمال کریں۔ snapToOffsets کے ساتھ آپ اسنیپ کے لیے مخصوص پوزیشنوں کی ایک صف بتا سکتے ہیں۔ یہ مختلف سائز کے کارڈز والی افقی فہرستوں کے لیے مفید ہے۔
آئیے دو عام منظرناموں کو دیکھتے ہیں: فارم اسکرین (عمودی اسکرول) اور افقی کیٹیگری فہرست۔ دونوں بہترین رویے کے لیے مختلف props کے ساتھ ScrollView استعمال کرتے ہیں۔
پروفائل ترمیم صفحہ میں متنوع عناصر ہوتے ہیں: اوتار، کئی ان پٹ فیلڈز، سوئچز اور ایک محفوظ بٹن۔ ScrollView ہر بلاک کو الگ الگ کرنے کے بجائے پورے صفحے کو ایک ساتھ اسکرول کرنے کی اجازت دیتا ہے۔
const ProfileScreen = () => (
<ScrollView
contentContainerStyle={styles.container}
keyboardShouldPersistTaps="handled"
showsVerticalScrollIndicator={false}
>
<AvatarPicker />
<TextInput placeholder="Name" />
<TextInput placeholder="Email" />
<TextInput placeholder="About me" multiline />
<SwitchRow label="Notifications" />
<Button title="Save" />
</ScrollView>
);
keyboardShouldPersistTaps: 'handled' prop کی بورڈ کھلا ہونے پر فارم کے ساتھ اسکرول اور تعامل کی اجازت دیتا ہے۔ contentContainerStyle تمام مواد پر پیڈنگ لگاتا ہے۔ یہ پیٹرن React Native کے تمام فارم اسکرینوں میں استعمال ہوتا ہے۔
کیٹیگریز (چیٹس، فلٹرز، ٹیبز) میں نیویگیٹ کرنے کے لیے، چپس کے ساتھ افقی ScrollView استعمال کیا جاتا ہے۔ یہ کمپونینٹ عام طور پر مارکیٹ پلیس اور سوشل میڈیا ایپلی کیشنز میں پایا جاتا ہے۔
const CategoryChips = ({ categories, selected, onSelect }) => (
<ScrollView
horizontal
showsHorizontalScrollIndicator={false}
contentContainerStyle={styles.chipContainer}
>
{categories.map((cat) => (
<Chip
key={cat.id}
label={cat.name}
isSelected={selected === cat.id}
onPress={() => onSelect(cat.id)}
/>
))}
</ScrollView>
);
انڈیکیٹر بند کے ساتھ افقی ScrollView کیٹیگری سٹرپس کے لیے معیاری ہے۔ ہر چپ انتخاب کی حالت کے ساتھ ایک علیحدہ کمپونینٹ ہے۔ showsHorizontalScrollIndicator: false prop اسکرول بار کو ہٹاتا ہے، جو موبائل ایپ صارفین کی توقعات سے مطابقت رکھتا ہے۔
اکثر پوچھے گئے سوالات
ScrollView چھوٹی مقدار کے ڈیٹا (20-30 عناصر تک) اور متنوع مواد (فارمز، پروفائلز، سیٹنگز اسکرینز) کے لیے موزوں ہے۔ لمبی یکساں فہرستوں کے لیے FlatList منتخب کریں — نیوز فیڈ، پروڈکٹ کیٹلاگ، پیغامات۔
onScroll ایونٹ کو onScrollEndDrag یا onMomentumScrollEnd کے ساتھ استعمال کریں۔ موجودہ عمودی پوزیشن nativeEvent.contentOffset.y میں ہے۔ کارکردگی کے لیے، onScroll کال فریکوئنسی کو ایڈجسٹ کرنے کے لیے ScrollEventThrottle (iOS) استعمال کریں۔
ScrollView ماؤنٹ ہونے پر تمام عناصر کو رینڈر کرتا ہے، ہر ایک کے لیے مقامی ویوز بناتا ہے۔ اسکرین پر 50+ عناصر کے ساتھ، میموری اور JS تھریڈ کا بوجھ بڑھ جاتا ہے، جس سے فریم ڈراپ ہوتا ہے۔ ایسی صورتوں میں، سست رینڈرنگ کے ساتھ FlatList استعمال کریں۔
bounces={false} سیٹ کریں۔ یہ prop صرف iOS پر کام کرتا ہے اور ScrollView کے کنارے پر پہنچنے پر اسپرنگ اثر کو غیر فعال کرتا ہے۔ Android پر ڈیفالٹ طور پر کوئی باؤنس اثر نہیں ہے، اس لیے prop کو نظر انداز کیا جاتا ہے۔
ScrollView مقامی طور پر لامحدود اسکرولنگ کو سپورٹ نہیں کرتا۔ تاہم، آپ onScroll کو نچلے کنارے سے قربت کی جانچ (contentOffset.y + اسکرین کی اونچائی >= contentSize.height) کے ساتھ جوڑ سکتے ہیں اور عناصر کو state میں شامل کر سکتے ہیں۔ بڑی مقدار کے لیے، onEndReached کے ساتھ FlatList استعمال کریں۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں