ScrollView — vad är det, rullningsbehållare och React Native

Författare: IT Sectr Publicerad: 2026-07-05 Lästid: 10 min

Komponenten ScrollView i React Native — en behållare med möjlighet att rulla innehåll som överskrider skärmens dimensioner. Till skillnad från FlatList renderar ScrollView allt innehåll på en gång, vilket är optimalt för små mängder data, formulär och skärmar med känd höjd. Enligt React Native Docs, 2024 stöder ScrollView vertikal och horisontell rullning, onScroll-händelsen, programmatisk positionskontroll och zoomgester. Komponenten renderas som inbyggd UIScrollView på iOS och ScrollView på Android.

Huvudpunkter

  • ScrollView — en behållare med rullning som renderar allt innehåll i sin helhet
  • Stöder vertikal och horisontell rullning
  • Renderas som UIScrollView på iOS och ScrollView på Android
  • Ger programmatisk rullningskontroll via scrollTo
  • För stora listor, använd FlatList eller SectionList istället för ScrollView

Vad är ScrollView i React Native

ScrollView — är en React Native-komponent som omsluter sitt innehåll i en rullningsbar behållare. Om innehållet går utanför skärmens gränser kan användaren rulla det vertikalt eller horisontellt. ScrollView renderar alla underordnade element vid montering, oavsett om de är synliga på skärmen eller inte.

Till skillnad från FlatList, som endast renderar synliga element (lazy rendering), skapar ScrollView alla inbyggda representationer på en gång. Detta gör ScrollView bekvämt för formulär, inställningssidor, produktkort på en skärm — överallt där antalet underordnade element är litet (upp till 20-30) eller det exakta antalet inte är känt i förväg.

Enligt React Native Using ScrollView, 2024 stöder ScrollView nästlad rullning (t.ex. ScrollView inuti ScrollView), studseffekt vid kant, rullningsindikatorer, positionssnäppning (snap) och gesthantering. På iOS lägger ScrollView automatiskt till mellanrum under SafeArea via contentInsetAdjustmentBehavior.

Egenskaper och API för ScrollView-komponenten

ScrollView erbjuder en rik uppsättning egenskaper för att kontrollera rullningsbeteende, utseende och interaktivitet. Låt oss titta på nyckelgrupperna: rullningskontroll, visuella inställningar, händelser och plattformsfunktioner.

Riktnings- och rullningskontroll

horizontal — växlar rullningsriktning från vertikal (standard) till horisontell. scrollEnabled — inaktiverar rullning vid behov. showsVerticalScrollIndicator och showsHorizontalScrollIndicator styr visningen av rullningsindikatorer. bounces (iOS) aktiverar/inaktiverar studseffekten vid innehållets kant.

ScrollView-händelser

Huvudhändelsen — onScroll, som anropas vid varje rullning och skickar ett objekt med nativeEvent som innehåller contentOffset (aktuell position), contentSize (innehållsstorlek), layoutMeasurement (storlek på synligt område). onMomentumScrollEnd anropas efter att tröghetsrullning slutförts. onScrollEndDrag — när användaren släppte skärmen. Dessa händelser används för att implementera oändlig rullning, parallax och lazy loading.

Programmatisk kontroll via ref

ScrollView tillhandahåller metoder för programmatisk kontroll via referens: scrollTo({x, y, animated}) rullar till angivna koordinater, scrollToEnd({animated}) — till slutet av innehållet, flashScrollIndicators() — visar tillfälligt rullningsindikatorerna.

js
const scrollRef = useRef(null);

// Rulla upp
scrollRef.current.scrollTo({ x: 0, y: 0, animated: true });

// Rulla till slutet
scrollRef.current.scrollToEnd({ animated: true });

Programmatisk rullningskontroll används ofta i chattar (automatisk rullning till senaste meddelandet), formulär (rullning till fältet med fel) och karuseller (programmatisk rullning).

Skillnader mellan ScrollView och FlatList

Valet mellan ScrollView och FlatList — ett av de viktigaste arkitekturbesluten i React Native. Båda komponenterna ger rullning, men använder fundamentalt olika renderingsstrategier. ScrollView renderar allt på en gång, FlatList — endast synliga element.

EgenskapScrollViewFlatList
RenderingAlla element på en gångEndast synliga + buffert
PrestandaMinskar vid 30+ elementStabil vid vilken mängd som helst
InnehållVilka komponenter som helst (formulär, kort)Homogena element från array
DatamängdLiten och medelstor (upp till 30 element)Stor och obegränsad
Horisontell rullningJa (egenskapen horizontal)Ja (horizontal)
SektionerNej (renderar som det är)SectionList för sektioner

Urvalsregel: ScrollView — för skärmar där antalet underordnade element är känt och inte överstiger 20-30 (användarprofil, inställningsformulär, produktsida). FlatList — för listor med potentiellt stort antal element (nyhetsflöde, produktkatalog, chattmeddelanden). Om innehållet är heterogent (rubrik, formulär, kort, sidfot) — är ScrollView att föredra eftersom FlatList förväntar sig homogena element.

Horisontell rullning och paginering

ScrollView stöder horisontell rullning via egenskapen horizontal, vilket gör den idealisk för karuseller, bildgallerier, flikar och horisontella listor. I kombination med egenskapen pagingEnabled (iOS) eller snapToInterval blir ScrollView en komponent för sidnavigering.

Horisontell karusell

Egenskapen horizontal växlar rullningsriktning. pagingEnabled (iOS) aktiverar sidrullning, där rullningen stannar endast vid elementens gränser. snapToInterval ställer in snäppsteget i pixlar för båda plattformarna.

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

I denna karusell snäpper pagingEnabled automatiskt rullningen till varje bilds gränser. onMomentumScrollEnd gör det möjligt att uppdatera indikatorn för aktuell sida. En sådan karusell fungerar inbyggt och stöder tröghetsrullning.

Snäppning till position (Snap)

För anpassade snäppsteg används snapToInterval (stegstorlek i pixlar) och snapToAlignment (start, center, end). Med snapToOffsets kan en array av specifika positioner för snäppning ställas in. Detta är användbart för horisontella listor med kort av olika storlek.

Praktiska exempel med ScrollView

Låt oss titta på två typiska scenarier: skärm med formulär (vertikal rullning) och horisontell kategorilista. Båda använder ScrollView med olika egenskaper för optimalt beteende.

Exempel 1: profilsida med formulär

Profilsidan innehåller heterogena element: avatar, flera inmatningsfält, växlar och en sparaknapp. ScrollView gör det möjligt att rulla hela sidan i sin helhet, inte varje block separat.

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

Egenskapen keyboardShouldPersistTaps: 'handled' möjliggör rullning och interaktion med formuläret när tangentbordet är öppet. contentContainerStyle tillämpar marginaler på allt innehåll. Detta mönster används på alla skärmar med formulär i React Native.

Exempel 2: horisontell kategorilista

För navigering mellan kategorier (chattar, filter, flikar) används en horisontell ScrollView med chips. En sådan komponent förekommer ofta i marketplace- och sociala nätverksappar.

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

Horisontell ScrollView med inaktiverad indikator — standard för kategoriraden. Varje chip är en separat komponent med ett markeringsläge. Egenskapen showsHorizontalScrollIndicator: false döljer rullningslisten, vilket motsvarar förväntningarna hos mobilappanvändare.

Vanliga frågor

När ska jag använda ScrollView istället för FlatList?

ScrollView är lämplig för små mängder data (upp till 20-30 element) och heterogent innehåll (formulär, profiler, inställningsskärmar). Välj FlatList för långa homogena listor — nyhetsflöde, produktkatalog, meddelanden.

Hur spårar man rullningspositionen?

Använd onScroll-händelsen med onScrollEndDrag eller onMomentumScrollEnd. I nativeEvent.contentOffset.y finns den aktuella vertikala positionen. För prestanda, använd ScrollEventThrottle (iOS) för att ställa in frekvensen för onScroll-anrop.

Varför blir ScrollView långsam med många element?

ScrollView renderar alla element vid montering och skapar inbyggda representationer för varje. Vid 50+ element på skärmen ökar belastningen på minne och JS-tråd, vilket orsakar bildtapp. För sådana fall, använd FlatList med lazy rendering.

Hur inaktiverar man studseffekten på iOS?

Ställ in bounces={false}. Denna egenskap fungerar endast på iOS och inaktiverar den fjädrande effekten vid ScrollViews kant. På Android finns studseffekten inte som standard, så egenskapen ignoreras.

Hur gör man oändlig rullning med ScrollView?

ScrollView stöder inte oändlig rullning inbyggt. Man kan dock kombinera onScroll med kontroll av närhet till nedre kanten (contentOffset.y + skärmhöjd >= contentSize.height) och lägga till element i state. För seriösa datamängder, använd FlatList med onEndReached.

Sammanfattning

  • ScrollView — React Native-behållare med rullning som renderar allt innehåll vid montering
  • Stöder vertikal och horisontell rullning via egenskapen horizontal
  • Programmatisk kontroll: scrollTo, scrollToEnd, flashScrollIndicators via ref
  • För stora listor, använd FlatList — ScrollView blir långsam vid 30+ element
  • Horisontell ScrollView med pagingEnabled — grund för karuseller och gallerier
  • Händelser onScroll, onMomentumScrollEnd, onScrollEndDrag för spårning av position
  • KeyboardShouldPersistTaps obligatorisk för formulär i ScrollView

Vi utvecklar en mobil applikation nyckelfärdigt

IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.

Diskutera projektet

Läs också