Uendelig scrolling i React: Guide med kodeeksempler

Utforsk Uendelig Rulling i React

Har du noen gang opplevd at en nettside eller applikasjon automatisk laster mer innhold mens du scroller nedover? Dette fenomenet kalles uendelig rulling, en teknikk som gir en mer sømløs og kontinuerlig brukeropplevelse.

Uendelig rulling er en populær metode som forenkler navigeringen gjennom store mengder informasjon. Denne tilnærmingen er spesielt gunstig for mobile enheter, hvor den bidrar til en jevnere og mer engasjerende opplevelse.

I React kan uendelig rulling implementeres på forskjellige måter. En av metodene er å benytte seg av eksterne biblioteker, slik som react-infinite-scroll-component. Dette biblioteket reagerer på brukerens scroll-aktivitet og gir beskjed når bunnen av siden nås, noe som trigger innlasting av mer innhold.

En annen tilnærming er å bruke Reacts egne funksjoner. For eksempel kan componentDidMount benyttes til å laste den første datamengden når komponenten monteres. Deretter kan componentDidUpdate sørge for at ytterligere data lastes inn etter hvert som brukeren scroller ned.

Alternativt kan man også bruke React Hooks for å implementere uendelig rulling.

La oss se nærmere på hvordan react-infinite-scroll-component kan brukes i praksis.

Installasjon av react-infinite-scroll-component

For å komme i gang må du først installere biblioteket via npm:

npm install react-infinite-scroll-component --save

Importering til React

Etter installasjonen må du importere komponenten til React-komponenten din:

 import React from 'react'
import InfiniteScroll from 'react-infinite-scroll-component'
	
class App extends React.Component {
  constructor() {
    super()
    this.state = {
      items: [],
      hasMore: true
    }
  }	
  componentDidMount() {
    this.fetchData(1)
  }
	
  fetchData = (page) => {
    const newItems = []
	
    for (let i = 0; i < 100; i++) {
      newItems.push(i )
    }
	
    if (page === 100) {
      this.setState({ hasMore: false })
    }
	
    this.setState({ items: [...this.state.items, ...newItems] })
  }
	
  render() {
    return (
      <div>
        <h1>Uendelig Rulling</h1>
        <InfiniteScroll
          dataLength={this.state.items.length}
          next={this.fetchData}
          hasMore={this.state.hasMore}
          loader={<h4>Laster...</h4>}
          endMessage={
            <p style={{ textAlign: 'center' }}>
              <b>Jippi! Du har sett alt!</b>
            </p>
          }
        >
          {this.state.items.map((item, index) => (
            <div key={index}>
              {item}
            </div>
          ))}
        </InfiniteScroll>
      </div>
    )
  }
}
	
export default App

Dette eksemplet begynner med å importere React og InfiniteScroll-komponenten. Deretter opprettes en stateful komponent med en tom liste for elementer og en hasMore-variabel satt til true.

Konfigurasjon av Parametere

I componentDidMount-metoden kalles fetchData med parameteren 1. Denne metoden henter data, eller i dette tilfellet genererer en rekke med 100 dummy-elementer.

Når page når 100, endres hasMore til false for å stoppe ytterligere innlasting. Til slutt oppdateres tilstanden med de nye dataene.

I render-metoden brukes InfiniteScroll-komponenten med flere parametere. dataLength er satt til lengden på elementlisten, next er fetchData-metoden, og hasMore er lik hasMore-variabelen.

loader-parameteren viser en «Laster…» melding, og endMessage vises når alle dataene er lastet inn.

Disse er de mest vanlige parameterne for InfiniteScroll, men du kan benytte flere.

Bruke Innebygde Funksjoner

React har også flere innebygde metoder som kan brukes til å implementere uendelig rulling.

En av disse metodene er componentDidUpdate, som React kaller etter at en komponent er oppdatert. Her kan du sjekke om brukeren har rullet til bunnen av siden, og laste mer data ved behov.

En annen metode er scroll, som React kaller når brukeren scroller. Denne metoden kan brukes til å holde oversikt over scroll-posisjonen og laste mer data når bunnen av siden nærmes.

Her er et eksempel som demonstrerer bruken av disse metodene:

 import React, {useState, useEffect} from 'react'
	
function App() {
  const [items, setItems] = useState([])
  const [hasMore, setHasMore] = useState(true)
  const [page, setPage] = useState(1)
	
  useEffect(() => {
    fetchData(page)
  }, [page])
	
  const fetchData = (page) => {
    const newItems = []
	
    for (let i = 0; i < 100; i++) {
      newItems.push(i)
    }
	
    if (page === 100) {
      setHasMore(false)
    }
	
    setItems([...items, ...newItems])
  }
	
  const onScroll = () => {
    const scrollTop = document.documentElement.scrollTop
    const scrollHeight = document.documentElement.scrollHeight
    const clientHeight = document.documentElement.clientHeight
	
    if (scrollTop + clientHeight >= scrollHeight) {
      setPage(page + 1)
    }
  }
	
  useEffect(() => {
    window.addEventListener('scroll', onScroll)
    return () => window.removeEventListener('scroll', onScroll)
  }, [items])
	
  return (
    <div>
      {items.map((item, index) => (
        <div key={index}>
          {item}
        </div>
      ))}
    </div>
  )
}
	
export default App 

Denne koden benytter useState og useEffect for å håndtere state og sideeffekter.

I useEffect-kroken kalles fetchData med gjeldende side. fetchData simulerer et API-kall og genererer 100 dummy-elementer.

Hvis page-parameteren er 100, settes hasMore til false for å stoppe videre datahenting.

Til slutt oppdateres state med de nye dataene.

onScroll-metoden følger med på scroll-posisjonen. Mer data lastes inn når bunnen av siden nærmes.

En useEffect-krok legger til en event listener for scroll-hendelsen, som kaller onScroll når den utløses.

Uendelig rulling i React har både fordeler og ulemper. Det gir et forbedret brukergrensesnitt med en jevnere opplevelse, spesielt for mobile brukere. Ulempen er at brukere kan gå glipp av innhold hvis de ikke scroller langt nok ned.

Det er viktig å vurdere disse fordelene og ulempene før du implementerer uendelig rulling på din nettside eller applikasjon.

Ved å legge til uendelig rulling til din React.js-applikasjon kan du forbedre brukeropplevelsen. Brukere slipper å klikke for å laste mer innhold. Det kan også redusere antall sideinnlastninger og dermed forbedre ytelsen.

Du kan også enkelt publisere din React-applikasjon på Github Pages helt gratis.