Reactで無限スクロールを実装する方法

Reactで無限スクロールを実装する方法

Reactで無限スクロールを実装する方法はいくつかありますが、一般的なアプローチは、スクロールイベントを監視して新しいデータをロードする方法です。
以下に、Reactで無限スクロールを実装するシンプルな例を示します。
この例では、スクロールがページの下部に達したときに新しいデータをロードします。

必要なライブラリをインストールします。
axiosを使用してデータを取得し、react-infinite-scroll-componentを使用して無限スクロール機能を簡単に実装します。

npm install axios react-infinite-scroll-component
# または
yarn add axios react-infinite-scroll-component

次に、Reactコンポーネントを作成します。

import React, { useState, useEffect } from 'react';
import axios from 'axios';
import InfiniteScroll from 'react-infinite-scroll-component';

const InfiniteScrollExample = () => {
  const [items, setItems] = useState([]);
  const [hasMore, setHasMore] = useState(true);
  const [page, setPage] = useState(1);

  useEffect(() => {
    fetchData();
  }, []);

  const fetchData = async () => {
    const response = await axios.get(https://api.example.com/data?page=${page}&limit=20);
    const newItems = response.data;

    setItems(prevItems => [...prevItems, ...newItems]);
    setPage(prevPage => prevPage + 1);
    if (newItems.length === 0) {
      setHasMore(false);
    }
  };

  return (
    <InfiniteScroll
      dataLength={items.length}
      next={fetchData}
      hasMore={hasMore}
      loader={<h4>Loading...</h4>}
      endMessage={<p>No more items to load</p>}
    >
      <div>
        {items.map((item, index) => (
          <div key={index}>
            <h4>{item.title}</h4>
            <p>{item.description}</p>
          </div>
        ))}
      </div>
    </InfiniteScroll>
  );
};

export default InfiniteScrollExample;

説明

1. Stateの設定

  • items:現在表示されているデータを格納します。
  • hasMore:更にデータをロードできるかどうかを示します。
  • page:現在のページ番号を追跡します。

2. useEffectフック

  • コンポーネントのマウント時に初期データをフェッチします。

3. fetchData関数

  • 現在のページ番号を基に新しいデータをAPIから取得し、既存のデータに追加します。
  • データが取得できない場合(newItems.lengthが0の場合)、hasMoreをfalseに設定します。

4. InfiniteScrollコンポーネント

  • dataLength:現在表示されているデータの長さ。
  • next:次のデータをフェッチするための関数。
  • hasMore:更にデータをロードする必要があるかどうか。
  • loader:データをロードしている間に表示されるコンポーネント。
  • endMessage:全てのデータがロードされた後に表示されるメッセージ。

このコードを使用すると、ユーザーがページの下部にスクロールしたときに新しいデータが自動的にロードされます。