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

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

от roxanne.hauck , в категории: JavaScript , год назад

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

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

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

от terrence , год назад

@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, но в зависимости от ваших требований может потребоваться более сложная реализация.

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

от camren , 2 месяца назад

@roxanne.hauck 

В предложенном примере использован простой способ реализации бесконечной прокрутки на React.js. Однако, для более сложных сценариев или для улучшения производительности, можно использовать библиотеки, такие как react-infinite-scroll-component, react-virtualized, react-window, которые предоставляют более продвинутые инструменты для управления бесконечным скроллом и рендерингом больших списков.


Эти библиотеки могут помочь в управлении виртуальным скроллингом, кэшированием элементов, ленивой загрузкой данных и другими аспектами, которые могут улучшить производительность и опыт пользователей при работе с большими списками данных.


При использовании библиотек для бесконечной прокрутки важно также учитывать особенности вашего проекта и выбрать подходящий инструмент для конкретной задачи.