React Native-də ScrollView komponenti — ekran ölçülərini aşan məzmunu sürüşdürmək imkanı olan konteynerdir. FlatList-dən fərqli olaraq, ScrollView bütün məzmunu dərhal render edir, bu da kiçik həcmli məlumatlar, formalar və məlum hündürlükdə olan ekranlar üçün optimaldır. React Native Docs, 2024-ə görə, ScrollView şaquli və üfüqi sürüşdürmə, onScroll hadisəsi, proqram mövqe idarəsi və zoom jestlərini dəstəkləyir. Komponent iOS-da nativ UIScrollView və Android-də ScrollView kimi render olunur.
Əsas məqamlar
ScrollView — məzmunu sürüşdürülə bilən konteynerə bükən React Native komponentidir. Məzmun ekranın hüdudlarından kənara çıxarsa, istifadəçi onu şaquli və ya üfüqi sürüşdürə bilər. ScrollView montaj zamanı bütün uşaq elementləri render edir, onların ekranda görünüb-görünməməsindən asılı olmayaraq.
Yalnız görünən elementləri render edən FlatList-dən (lazy rendering) fərqli olaraq, ScrollView bütün nativ təsvirləri dərhal yaradır. Bu, ScrollView-i formalar, parametrlər səhifələri, bir ekranda məhsul kartları üçün əlverişli edir — uşaq elementlərin sayının az olduğu (20-30-dək) və ya onların dəqiq sayının əvvəlcədən bilinmədiyi hallar üçün.
React Native Using ScrollView, 2024-ə görə, ScrollView iç-içə sürüşdürməni (məsələn, ScrollView içərisində ScrollView), kənara çatdıqda bounce effekti, sürüşdürmə göstəricilərini, mövqe snap-i və jestləri dəstəkləyir. iOS-da ScrollView contentInsetAdjustmentBehavior vasitəsilə SafeArea altına avtomatik boşluq əlavə edir.
ScrollView sürüşdürmə davranışını, görünüşünü və interaktivliyini idarə etmək üçün zəngin xüsusiyyətlər dəsti təqdim edir. Əsas qrupları nəzərdən keçirək: sürüşdürmə idarəsi, vizual parametrlər, hadisələr və platforma xüsusiyyətləri.
horizontal — sürüşdürmə istiqamətini şaquli (standart) haldan üfüqiyə dəyişir. scrollEnabled — lazım olduqda sürüşdürməni söndürür. showsVerticalScrollIndicator və showsHorizontalScrollIndicator sürüşdürmə göstəricilərini idarə edir. bounces (iOS) məzmunun kənarına çatdıqda bounce effektini aktivləşdirir/söndürür.
Əsas hadisə — onScroll, hər sürüşdürmədə çağırılır və nativeEvent ilə obyekt ötürür, tərkibində contentOffset (cari mövqe), contentSize (məzmun ölçüsü), layoutMeasurement (görünən sahənin ölçüsü). onMomentumScrollEnd inertial sürüşdürmə bitdikdən sonra çağırılır. onScrollEndDrag — istifadəçi ekranı buraxdıqda. Bu hadisələr sonsuz sürüşdürmə, parallaks və gecikmiş yükləməni həyata keçirmək üçün istifadə olunur.
ScrollView referans vasitəsilə proqram idarəsi üçün metodlar təqdim edir: scrollTo({x, y, animated}) göstərilən koordinatlara sürüşdürür, scrollToEnd({animated}) — məzmunun sonuna, flashScrollIndicators() — müvəqqəti olaraq sürüşdürmə göstəricilərini göstərir.
const scrollRef = useRef(null);
// Yuxarı sürüşdür
scrollRef.current.scrollTo({ x: 0, y: 0, animated: true });
// Axıra sürüşdür
scrollRef.current.scrollToEnd({ animated: true });
Sürüşdürmənin proqram idarəsi çatlarda (son mesaja avtomatik sürüşdürmə), formalarda (səhv olan sahəyə sürüşdürmə) və karusellərdə (proqram sürüşdürmə) tez-tez istifadə olunur.
ScrollView və FlatList arasında seçim — React Native-də əsas memarlıq qərarlarından biridir. Hər iki komponent sürüşdürmə təmin edir, lakin prinsipial olaraq fərqli render strategiyalarından istifadə edir. ScrollView hər şeyi dərhal render edir, FlatList — yalnız görünən elementləri.
| Xüsusiyyət | ScrollView | FlatList |
|---|---|---|
| Render | Bütün elementlər dərhal | Yalnız görünənlər + buffer |
| Performans | 30+ elementdə azalır | İstənilən sayda stabil |
| Məzmun | İstənilən komponentlər (formalar, kartlar) | Massivdən eynitipli elementlər |
| Məlumat həcmi | Kiçik və orta (30 elementədək) | Böyük və limitsiz |
| Üfüqi sürüşdürmə | Bəli (horizontal xüsusiyyəti) | Bəli (horizontal) |
| Bölmələr | Xeyr (olduğu kimi render edir) | Bölmələr üçün SectionList |
Seçim qaydası: ScrollView — uşaq elementlərinin sayının məlum olduğu və 20-30-u keçmədiyi ekranlar üçün (istifadəçi profili, parametrlər forması, məhsul səhifəsi). FlatList — potensial çox sayda elementi olan listlər üçün (xəbər lenti, məhsul kataloqu, çat mesajları). Məzmun müxtəlifdirsə (başlıq, forma, kart, footer) — ScrollView daha üstündür, çünki FlatList eynitipli elementlər gözləyir.
ScrollView horizontal xüsusiyyəti vasitəsilə üfüqi sürüşdürməni dəstəkləyir, bu da onu karusellər, şəkil qalereyaları, tablar və üfüqi listlər üçün ideal edir. pagingEnabled (iOS) və ya snapToInterval ilə birlikdə ScrollView səhifə naviqasiyası komponentinə çevrilir.
horizontal xüsusiyyəti sürüşdürmə istiqamətini dəyişir. pagingEnabled (iOS) səhifə sürüşdürməsini aktivləşdirir, burada scroll yalnız elementlərin sərhədlərində dayanır. snapToInterval hər iki platforma üçün pikseldə snap addımını təyin edir.
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>
);
Bu karuseldə pagingEnabled avtomatik olaraq scroll-u hər şəklin sərhədlərinə yapışdırır. onMomentumScrollEnd cari səhifənin göstəricisini yeniləməyə imkan verir. Belə karusel nativ işləyir və inertial sürüşdürməni dəstəkləyir.
Qeyri-standart snap addımları üçün snapToInterval (pikseldə addım ölçüsü) və snapToAlignment (start, center, end) istifadə olunur. snapToOffsets vasitəsilə snap üçün konkret mövqelər massivi təyin etmək olar. Bu, müxtəlif ölçülü kartları olan üfüqi listlər üçün faydalıdır.
İki tipik ssenarini nəzərdən keçirək: formalı ekran (şaquli sürüşdürmə) və üfüqi kateqoriya listi. Hər ikisi optimal davranış üçün müxtəlif xüsusiyyətlərlə ScrollView istifadə edir.
Profil redaktə səhifəsi müxtəlif elementlər ehtiva edir: avatar, bir neçə daxiletmə sahəsi, keçidlər və yaddaş düyməsi. ScrollView bütün səhifəni bütövlükdə sürüşdürməyə imkan verir, hər bloku ayrıca yox.
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' xüsusiyyəti klaviatura açıq olduqda sürüşdürməyə və forma ilə qarşılıqlı əlaqəyə imkan verir. contentContainerStyle bütün məzmun üçün boşluqlar tətbiq edir. Bu nümunə React Native-də bütün formalı ekranlarda istifadə olunur.
Kateqoriyalar üzrə naviqasiya üçün (çatlar, filtrlər, tablar) chiplərlə üfüqi ScrollView istifadə olunur. Belə komponent tez-tez marketplace və sosial şəbəkə tətbiqlərində rast gəlinir.
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>
);
Göstəricisi söndürülmüş üfüqi ScrollView — kateqoriya zolağı üçün standartdır. Hər chip seçim vəziyyəti olan ayrıca komponentdir. showsHorizontalScrollIndicator: false xüsusiyyəti sürüşdürmə zolağını gizlədir, bu da mobil tətbiq istifadəçilərinin gözləntilərinə uyğundur.
Tez-tez verilən suallar
ScrollView kiçik həcmli məlumatlar (20-30 elementədək) və müxtəlif məzmun (formalar, profillər, parametr ekranları) üçün uyğundur. FlatList-i uzun eynitipli listlər üçün seçin — xəbər lenti, məhsul kataloqu, mesajlar.
onScroll hadisəsini onScrollEndDrag və ya onMomentumScrollEnd ilə istifadə edin. nativeEvent.contentOffset.y cari şaquli mövqeyi ehtiva edir. Performans üçün ScrollEventThrottle (iOS) istifadə edərək onScroll çağırış tezliyini tənzimləyin.
ScrollView montaj zamanı bütün elementləri render edir, hər biri üçün nativ təsvirlər yaradır. Ekranda 50+ element olduqda yaddaş və JS axını yükü artır, çərçivə düşmələrinə səbəb olur. Belə hallarda FlatList ilə gecikmiş render istifadə edin.
bounces={false} təyin edin. Bu xüsusiyyət yalnız iOS-da işləyir və ScrollView kənarına çatdıqda yay effektini söndürür. Android-də bounce effekti standart olaraq yoxdur, ona görə xüsusiyyət nəzərə alınmır.
ScrollView nativ olaraq sonsuz sürüşdürməni dəstəkləmir. Lakin onScroll-u aşağı kənara yaxınlaşmanı yoxlamaqla (contentOffset.y + ekran hündürlüyü >= contentSize.height) birləşdirib elementləri state-ə əlavə etmək olar. Böyük həcmli məlumatlar üçün FlatList-dən onEndReached ilə istifadə edin.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun