ScrollView — mi ez, görgető konténer és React Native

Szerző: IT Sectr Megjelenés: 2026-07-05 Olvasási idő: 10 perc

A ScrollView komponens a React Native-ben — egy konténer, amely lehetővé teszi a képernyő méreteit meghaladó tartalom görgetését. A FlatList-tel ellentétben a ScrollView az összes tartalmat egyszerre rendereli, ami optimális kis adatmennyiségek, űrlapok és ismert magasságú képernyők esetén. A React Native Docs, 2024 szerint a ScrollView támogatja a függőleges és vízszintes görgetést, az onScroll eseményt, a programozott pozícióvezérlést és a zoom gesztusokat. A komponens natív UIScrollView-ként renderelődik iOS-en és ScrollView-ként Androidon.

Főbb pontok

  • ScrollView — görgethető konténer, amely az összes tartalmat teljes egészében rendereli
  • Támogatja a függőleges és vízszintes görgetést
  • UIScrollView-ként renderelődik iOS-en és ScrollView-ként Androidon
  • Programozott görgetésvezérlést biztosít a scrollTo-n keresztül
  • Nagy listákhoz használj FlatList vagy SectionList komponenst a ScrollView helyett

Mi az a ScrollView a React Native-ben

ScrollView — egy React Native komponens, amely a tartalmát egy görgethető konténerbe csomagolja. Ha a tartalom túllépi a képernyő határait, a felhasználó függőlegesen vagy vízszintesen görgetheti. A ScrollView az összes gyermekelemet a csatlakoztatáskor rendereli, függetlenül attól, hogy láthatóak-e a képernyőn vagy sem.

A FlatList-tel ellentétben, amely csak a látható elemeket rendereli (lusta renderelés), a ScrollView az összes natív megjelenítést egyszerre hozza létre. Ez teszi a ScrollView-t kényelmessé űrlapok, beállításoldalak, termékkártyák egy képernyőn — mindenhol, ahol a gyermekelemek száma kicsi (20-30-ig) vagy pontos számuk előre nem ismert.

A React Native Using ScrollView, 2024 szerint a ScrollView támogatja az egymásba ágyazott görgetést (pl. ScrollView a ScrollView-n belül), a pattogó effektust a szél elérésekor, görgetésjelzőket, pozíciórögzítést (snap) és gesztuskezelést. iOS-en a ScrollView automatikusan helyet ad a SafeArea alá a contentInsetAdjustmentBehavior segítségével.

A ScrollView komponens tulajdonságai és API-ja

ScrollView gazdag tulajdonságkészletet kínál a görgetési viselkedés, megjelenés és interaktivitás vezérléséhez. Tekintsük át a kulcsfontosságú csoportokat: görgetésvezérlés, vizuális beállítások, események és platformjellemzők.

Irány és görgetés vezérlése

horizontal — a görgetés irányát függőlegesről (alapértelmezett) vízszintesre váltja. scrollEnabled — szükség esetén kikapcsolja a görgetést. showsVerticalScrollIndicator és showsHorizontalScrollIndicator vezérli a görgetésjelzők megjelenítését. bounces (iOS) be-/kikapcsolja a pattogó effektust a tartalom szélének elérésekor.

ScrollView események

A fő esemény — onScroll, amely minden görgetéskor meghívódik és egy objektumot ad át a nativeEvent-tel, amely tartalmazza a contentOffset (aktuális pozíció), contentSize (tartalom mérete), layoutMeasurement (látható terület mérete) értékeket. onMomentumScrollEnd a tehetetlenségi görgetés befejezése után hívódik meg. onScrollEndDrag — amikor a felhasználó elengedi a képernyőt. Ezeket az eseményeket végtelen görgetés, parallaxis és lusta betöltés megvalósításához használják.

Programozott vezérlés ref-en keresztül

A ScrollView metódusokat biztosít a programozott vezérléshez referencián keresztül: scrollTo({x, y, animated}) a megadott koordinátákra görget, scrollToEnd({animated}) — a tartalom végére, flashScrollIndicators() — ideiglenesen megjeleníti a görgetésjelzőket.

js
const scrollRef = useRef(null);

// Görgess fel
scrollRef.current.scrollTo({ x: 0, y: 0, animated: true });

// Görgess a végére
scrollRef.current.scrollToEnd({ animated: true });

A görgetés programozott vezérlését gyakran használják csevegésekben (automatikus görgetés az utolsó üzenethez), űrlapokban (görgetés a hibás mezőhöz) és karuszelekben (programozott lapozás).

Különbségek a ScrollView és a FlatList között

A választás a ScrollView és a FlatList között — az egyik kulcsfontosságú architekturális döntés a React Native-ben. Mindkét komponens görgetést biztosít, de alapvetően eltérő renderelési stratégiákat használ. A ScrollView mindent egyszerre renderel, a FlatList — csak a látható elemeket.

JellemzőScrollViewFlatList
RenderelésMinden elem egyszerreCsak látható + buffer
TeljesítményCsökken 30+ elemnélStabil bármilyen mennyiségnél
TartalomBármilyen komponens (űrlapok, kártyák)Homogén elemek tömbből
AdatmennyiségKis és közepes (30 elemig)Nagy és korlátlan
Vízszintes görgetésIgen (horizontal tulajdonság)Igen (horizontal)
SzakaszokNem (úgy rendereli, ahogy van)SectionList a szakaszokhoz

Választási szabály: ScrollView — olyan képernyőkhöz, ahol a gyermekelemek száma ismert és nem haladja meg a 20-30-at (felhasználói profil, beállítási űrlap, termékoldal). FlatList — olyan listákhoz, amelyek potenciálisan nagy számú elemet tartalmaznak (hírcsatorna, termékkatalógus, csevegésüzenetek). Ha a tartalom heterogén (cím, űrlap, kártya, lábléc) — a ScrollView előnyösebb, mivel a FlatList homogén elemeket vár.

Vízszintes görgetés és lapozás

ScrollView támogatja a vízszintes görgetést a horizontal tulajdonságon keresztül, ami ideálissá teszi karuszelekhez, képgalériákhoz, lapokhoz és vízszintes listákhoz. A pagingEnabled (iOS) vagy snapToInterval tulajdonsággal kombinálva a ScrollView lapozható navigációs komponenssé válik.

Vízszintes karuszell

A horizontal tulajdonság megváltoztatja a görgetés irányát. A pagingEnabled (iOS) bekapcsolja a lapozható görgetést, ahol a görgetés csak az elemek határainál áll meg. snapToInterval beállítja a rögzítési lépést pixelben mindkét platformon.

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>
);

Ebben a karuszellben a pagingEnabled automatikusan a képek határaihoz rögzíti a görgetést. onMomentumScrollEnd lehetővé teszi az aktuális oldal jelzőjének frissítését. Az ilyen karuszell natívan működik és támogatja a tehetetlenségi görgetést.

Pozícióhoz rögzítés (Snap)

Egyedi rögzítési lépésekhez a snapToInterval (lépésméret pixelben) és a snapToAlignment (start, center, end) használható. A snapToOffsets segítségével konkrét pozíciók tömbje állítható be a rögzítéshez. Ez hasznos különböző méretű kártyákat tartalmazó vízszintes listákhoz.

Gyakorlati példák a ScrollView-val

Tekintsünk két tipikus forgatókönyvet: képernyő űrlappal (függőleges görgetés) és vízszintes kategórialista. Mindkettő ScrollView-t használ különböző tulajdonságokkal az optimális viselkedés érdekében.

1. példa: profilképernyő űrlappal

A profil szerkesztőoldala heterogén elemeket tartalmaz: avatart, több beviteli mezőt, kapcsolókat és mentés gombot. A ScrollView lehetővé teszi a teljes oldal egészének görgetését, nem pedig minden blokk külön-külön.

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>
);

A keyboardShouldPersistTaps: 'handled' tulajdonság lehetővé teszi a görgetést és az űrlappal való interakciót, amikor a billentyűzet nyitva van. A contentContainerStyle margókat alkalmaz a teljes tartalomra. Ezt a mintát minden űrlapos képernyőn használják a React Native-ben.

2. példa: vízszintes kategórialista

A kategóriák közötti navigációhoz (csevegések, szűrők, lapok) vízszintes ScrollView-t használnak chipekkel. Ez a komponens gyakran megtalálható piactér- és közösségimédia-alkalmazásokban.

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>
);

Vízszintes ScrollView jelzővel kikapcsolva — szabvány a kategóriasávhoz. Minden chip egy külön komponens kiválasztási állapottal. A showsHorizontalScrollIndicator: false tulajdonság elrejti a görgetősávot, ami megfelel a mobilalkalmazás-felhasználók elvárásainak.

Gyakran ismételt kérdések

Mikor használjak ScrollView-t a FlatList helyett?

A ScrollView kis mennyiségű adathoz (20-30 elemig) és heterogén tartalomhoz (űrlapok, profilok, beállítási képernyők) alkalmas. Válassza a FlatList-et hosszú homogén listákhoz — hírcsatorna, termékkatalógus, üzenetek.

Hogyan lehet követni a görgetési pozíciót?

Használja az onScroll eseményt az onScrollEndDrag vagy onMomentumScrollEnd eseményekkel. A nativeEvent.contentOffset.y tartalmazza az aktuális függőleges pozíciót. A teljesítmény érdekében használja a ScrollEventThrottle (iOS) beállítást az onScroll hívások gyakoriságának szabályozásához.

Miért lassul le a ScrollView sok elemmel?

A ScrollView az összes elemet rendereli csatlakoztatáskor, natív megjelenítéseket hozva létre mindegyikhez. 50+ elemnél a képernyőn a memória- és JS-szál terhelése nő, ami képkocka-kiesést okoz. Ilyen esetekben használja a FlatList-et lusta rendereléssel.

Hogyan lehet kikapcsolni a pattogó effektust iOS-en?

Állítsa be a bounces={false} értéket. Ez a tulajdonság csak iOS-en működik, és kikapcsolja a rugós effektust a ScrollView szélének elérésekor. Androidon a pattogó effektus alapértelmezés szerint nem létezik, így a tulajdonság figyelmen kívül marad.

Hogyan készítsek végtelen görgetést a ScrollView-val?

A ScrollView natívan nem támogatja a végtelen görgetést. Azonban kombinálható az onScroll az alsó szélhez való közeledés ellenőrzésével (contentOffset.y + képernyő magasság >= contentSize.height), és elemek adhatók hozzá a state-hez. Komoly adatmennyiségekhez használja a FlatList-et onEndReached-del.

Összefoglalás

  • ScrollView — React Native konténer görgetéssel, amely az összes tartalmat csatlakoztatáskor rendereli
  • Támogatja a függőleges és vízszintes görgetést a horizontal tulajdonságon keresztül
  • Programozott vezérlés: scrollTo, scrollToEnd, flashScrollIndicators ref-en keresztül
  • Nagy listákhoz használj FlatList-et — a ScrollView lelassul 30+ elemnél
  • Vízszintes ScrollView pagingEnabled-nel — alap a karuszelekhez és galériákhoz
  • onScroll, onMomentumScrollEnd, onScrollEndDrag események a pozíció követéséhez
  • KeyboardShouldPersistTaps kötelező a ScrollView-n belüli űrlapokhoz

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is