Как сделать бесконечную прокрутку элементов на react.js?

Пользователь

от roxanne.hauck , в категории: JavaScript , 7 месяцев назад

Как сделать бесконечную прокрутку элементов на react.js?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от terrence , 6 месяцев назад

@roxanne.hauck 

Для создания бесконечной прокрутки (инфинити-скролла) на React.js можно использовать следующий подход:

  1. Определите компонент, который будет отображать список элементов, которые могут быть прокручены бесконечно. Например:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import React, { useState, useEffect } from "react";

const InfiniteScroll = ({ data }) => {
  const [items, setItems] = useState([]);
  const [page, setPage] = useState(0);

  const loadMore = () => {
    const newItems = data.slice(page * 10, page * 10 + 10);
    setItems((prevItems) => [...prevItems, ...newItems]);
    setPage((prevPage) => prevPage + 1);
  };

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

  return (
    <div>
      {items.map((item) => (
        <div key={item.id}>{item.text}</div>
      ))}
      <button onClick={loadMore}>Load more</button>
    </div>
  );
};

export default InfiniteScroll;


  1. В этом компоненте мы используем состояние items, которое хранит текущий список элементов, и page, который отслеживает текущую страницу. Мы также определяем функцию loadMore, которая добавляет следующую порцию элементов в список при нажатии на кнопку "Load more".
  2. Мы используем хук useEffect с пустым массивом зависимостей, чтобы загрузить первую порцию элементов при монтировании компонента.
  3. Для бесконечной прокрутки мы можем изменить функцию loadMore так, чтобы она загружала следующую порцию элементов при достижении конца списка:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
const loadMore = () => {
  const newItems = data.slice(page * 10, page * 10 + 10);
  setItems((prevItems) => [...prevItems, ...newItems]);
  setPage((prevPage) => prevPage + 1);
};

useEffect(() => {
  const onScroll = () => {
    if (
      window.innerHeight + window.scrollY >=
      document.body.offsetHeight - 500
    ) {
      loadMore();
    }
  };
  window.addEventListener("scroll", onScroll);
  return () => window.removeEventListener("scroll", onScroll);
}, []);


  1. Мы добавляем слушатель события scroll на объект window, который вызывает функцию loadMore при достижении конца страницы. В этом примере мы вызываем loadMore, когда скроллим вниз на 500 пикселей до конца страницы.
  2. Не забудьте очистить слушатель событий при размонтировании компонента, чтобы избежать утечек памяти.


Это пример простой реализации бесконечной прокрутки на React.js, но в зависимости от ваших требований может потребоваться более сложная реализация.