ScrollView — nədir, sürüşdürmə konteyneri və React Native

Müəllif: IT Sectr Dərc olunub: 2026-07-05 Oxuma vaxtı: 10 dəq

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 — bütün məzmunu tamamilə render edən sürüşdürmə konteyneri
  • Şaquli və üfüqi sürüşdürməni dəstəkləyir
  • iOS-da UIScrollView, Android-də ScrollView kimi render olunur
  • scrollTo vasitəsilə proqram sürüşdürmə idarəsi təmin edir
  • Böyük listlər üçün ScrollView əvəzinə FlatList və ya SectionList istifadə edin

React Native-də ScrollView nədir

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 komponentinin xüsusiyyətləri və API

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.

İstiqamət və sürüşdürmə idarəsi

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.

ScrollView hadisələri

Ə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.

Ref vasitəsilə proqram idarəsi

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.

js
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ındakı fərqlər

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ətScrollViewFlatList
RenderBütün elementlər dərhalYalnız görünənlər + buffer
Performans30+ 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əcmiKiç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ərXeyr (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.

Üfüqi sürüşdürmə və paginasiya

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.

Üfüqi karusel

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.

js
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.

Mövqeyə snap (Snap)

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.

ScrollView ilə praktik nümunələ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.

Nümunə 1: formalı profil ekranı

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.

js
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.

Nümunə 2: üfüqi kateqoriya listi

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.

js
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

Nə vaxt ScrollView istifadə etməli, FlatList yox?

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.

Sürüşdürmə mövqeyini necə izləmək olar?

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.

Niyə ScrollView çox elementlə yavaş işləyir?

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.

iOS-da bounce effektini necə söndürmək olar?

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 ilə sonsuz sürüşdürmə necə etmək olar?

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ə

  • ScrollView — montaj zamanı bütün məzmunu render edən sürüşdürülə bilən React Native konteyneri
  • horizontal xüsusiyyəti ilə şaquli və üfüqi sürüşdürməni dəstəkləyir
  • Proqram idarəsi: scrollTo, scrollToEnd, flashScrollIndicators ref vasitəsilə
  • Böyük listlər üçün FlatList istifadə edin — ScrollView 30+ elementdə yavaşlayır
  • pagingEnabled ilə üfüqi ScrollView — karusellər və qalereyalar üçün əsas
  • onScroll, onMomentumScrollEnd, onScrollEndDrag hadisələri mövqeyi izləmək üçün
  • KeyboardShouldPersistTaps ScrollView daxilində formalar üçün məcburidir

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.

Layihəni müzakirə et

Həm də oxuyun