Статьи

Пример бесконечной прокрутки ReactJS

В этой статье мы реализуем функцию бесконечной прокрутки в приложении ReactJS. Эта функция позволяет нам загружать и представлять дополнительный контент, когда пользователь прокручивает контейнер. Это создает впечатление, казалось бы, бесконечного содержания и, следовательно, названия бесконечного свитка. В этой статье мы создадим контейнер, который при прокрутке будет загружать дополнительный контент в контейнер. Мы обернем эту функцию в компонент React, чтобы сделать ее гибкой и многократно используемой в приложениях.

Хотя существует много готовых компонентов такого рода, мы реализуем свои собственные с нуля. Итак, начнем.

1. Инструменты и рамки

Мы используем приведенный ниже набор инструментов для этого примера, некоторые из которых вы можете заменить на те, которые вы выбираете сами. В то время как другим обязательно следовать примеру.

Этот пакет npm позволяет нам быстро создать скелетное приложение React, которое служит целям этого примера.

Эта IDE — мой любимый редактор при работе с React, но есть и другие варианты, и вы можете переключиться на свой.

2. Начальная настройка

Для начала мы используем приложение create-реакции-приложение, чтобы создать отправную точку этого примера. Выполнение команды ниже создает наше приложение и открывает его в редакторе Visual Studio для редактирования.

1
> npx create-react-app my-app .

Как только эта команда завершится, мы выполним следующее после переключения в каталог, где находится наше приложение.

1
>code .

Теперь нам нужно добавить следующие пакеты npm для настройки нашего примера.

  • Машинопись

Мы используем Typescript для написания нашего кода для этого примера и, следовательно, для этой цели необходимо установить typcript.

  • Реагировать Типы

Типы React требуются при использовании машинописи для написания React-приложений.

  • Реагировать Polyfill

Это позволяет нашему приложению работать в последней версии браузера IE.

Мы можем установить вышеуказанные зависимости, запустив приведенную ниже команду в корне проекта.

1
> npm install typescript @types/react react-app-polyfill --save

Как только приведенная выше команда завершится, мы готовы приступить к реализации нашей функции бесконечной прокрутки.

3. Структура проекта

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

ReactJS Infinite Scroll - структура папок
Структура папок

4. Реализация

Теперь я добавлю файл с именем InfiniteScroll.tsx, который будет компонентом класса и контейнером с бесконечной прокруткой. В методе рендеринга нашего компонента мы возвращаем простой div украшенный scroller класса CSS. Мы также обрабатываем событие onScroll этого контейнера. С помощью CSS ниже мы достигаем следующего.

Отключите горизонтальную полосу прокрутки и скройте вертикальную полосу прокрутки в браузерах, но при этом сохраняйте прокрутку div .

InfiniteScroll.css

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
.scroller {
  width: 50%;
  height: 240px;
  background-color: green;
  overflow: scroll;
  overflow-x: hidden;
  /* IE Hide Scrollbar */
  -ms-overflow-style: none;
}
 
/* Chrome Hide Scrollbar */
.scroller::-webkit-scrollbar {
  width: 0 !important;
}
 
/* Firefox Hide Scrollbar */
.scroller {
  overflow: -moz-scrollbars-none;
  scrollbar-width: none;
}

Мы импортируем этот файл в наш компонент, и наш компонент выглядит следующим образом

InfiniteScroll.tsx

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import React from 'react';
import './InfiniteScroll.css';
 
class InfiniteScroll extends
React.Component {
    scroll: any;
    scroller: any;
    
    constructor(props: any) {
        super(props);
        this.state = {
            counter: 1,
            position: 0
        };
        this.scroller = React.createRef();
    }
    render = () => {
        return <div className='scroller'
 onScroll={this.onScroll} ref={this.scroller}></div>
    }
    componentDidMount = () => {
        this.addDivs(5);
    }
    onScroll = () => {
        if(this.scroller.current.scrollTop > this.state.position){
            this.addDivs(2);
        }
        this.setState({ position: this.scroller.current.scrollTop });
         
    }
    addDivs = (number: any) => {
        let cnt = +this.state.counter;
        for (let i = 1; i <= number; i++) {           
            let div = document.createElement("div");
            div.innerText = cnt.toString();
            div.style.width = "90%";
            div.style.height = "200px";
            div.style.backgroundColor = "blue";
            this.scroller.current.appendChild(div);
            cnt = +cnt + 1;
        }
        this.setState({ counter: cnt });
    }
}
export default InfiniteScroll;

Метод onScroll добавляет больше тегов div к контейнеру каждый раз, когда контейнер прокручивается дальше. Это создает бесконечно прокручиваемый контейнер. Чтобы запустить код и увидеть это в действии, нам нужно выполнить следующую команду

1
>npm run start

Теперь мы можем перейти к http://localhost:3000 чтобы увидеть результаты. Который выглядит как ниже:

ReactJS Infinite Scroll - Результаты проекта
Выход проекта

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

5. Загрузите исходный код

Скачать
Вы можете скачать полный исходный код этого примера здесь: Пример бесконечной прокрутки ReactJS