Создание компонентов прокручиваемого списка в React.js: несколько методов и примеров

Чтобы создать компонент прокручиваемого списка в React.js, можно использовать несколько подходов. Вот несколько способов:

Метод 1. Использование CSS

  1. Оберните список внутри контейнера div с фиксированной высотой.
  2. Примените стили CSS к элементу div контейнера, чтобы включить прокрутку.
  3. Установите свойство CSS overflow: autoв контейнере div, чтобы разрешить прокрутку.
  4. Настройте свойство max-heightконтейнера div, чтобы контролировать видимую высоту списка.

Пример кода:

import React from 'react';
const ScrollableList = () => {
  return (
    <div className="list-container">
      <ul className="list">
        {/* List items */}
      </ul>
    </div>
  );
};
export default ScrollableList;
.list-container {
  max-height: 300px; /* Adjust the height as needed */
  overflow: auto;
}
.list {
  list-style-type: none;
  padding: 0;
  margin: 0;
}

Метод 2: использование библиотеки прокрутки React

  1. Установите библиотеку, например react-scrollили react-virtualized, которая предоставляет компоненты прокручиваемого списка.
  2. Следуйте документации библиотеки, чтобы реализовать компонент прокручиваемого списка.
  3. Эти библиотеки часто имеют дополнительные функции, такие как виртуализация, для эффективной обработки больших списков.

Пример использования react-scroll:

import React from 'react';
import { Scrollbars } from 'react-scrollbars-custom';
const ScrollableList = () => {
  return (
    <Scrollbars style={{ height: 300 }}>
      <ul>
        {/* List items */}
      </ul>
    </Scrollbars>
  );
};
export default ScrollableList;

Метод 3. Пользовательский прокручиваемый компонент

  1. Создайте собственный компонент, поддерживающий функцию прокрутки.
  2. Используйте CSS для стилизации компонента, включая настройку свойств высоты и переполнения.
  3. Реализовать прокрутку с помощью прослушивателей событий JavaScript или состояния React.

Пример кода:

import React, { useRef, useEffect } from 'react';
const ScrollableList = () => {
  const listRef = useRef(null);
  useEffect(() => {
    const listContainer = listRef.current;
    // Add event listeners or custom logic to handle scrolling behavior
    // e.g., listContainer.addEventListener('scroll', handleScroll);
    // Don't forget to clean up the event listeners in the cleanup function
    // return () => {
    //   listContainer.removeEventListener('scroll', handleScroll);
    // }
  }, []);
  return (
    <div ref={listRef} style={{ height: 300, overflow: 'auto' }}>
      <ul>
        {/* List items */}
      </ul>
    </div>
  );
};
export default ScrollableList;