JSFiddle - React, Tailwind, and code Playground

HTML

<div id="root" class="container">

</div>

CSS

.container {
  height: 300px;
  width: 80%;
  border: 1px solid black;
  overflow-y: scroll;
}

.item {
  width: 50px;
  height: 50px;
  background-color: #d3d3d8;
  margin: 10px;
  float: left;
}

JavaScript

function getContent(offset, num) {
  let arr = [];
	for(var i = offset; i<offset+num;i++) {
  	arr.push(i);
  }
  
  return new Promise((resolve) => {
  	setTimeout(() => {
    	resolve(arr);
    }, Math.random() * 5000);
  });
}

const chunkSize = 50;
let loadedIndex = 0;
let loading = false;
let container = document.getElementById("root");

const addElements = () => {
  if (container.scrollHeight === (container.clientHeight + container.scrollTop) && !loading) {
    loading = true;
    getContent(loadedIndex, chunkSize).then((loaded) => {
    	loading = false;
      const elements = loaded.map((item) => {
        const element = document.createElement('div');
        element.className = 'item';
        element.textContent = item;
        return element;
      });
      container.append(...elements)
      loadedIndex += chunkSize;
      /* loadedContent = [...loadedContent, elements] */
      /* console.log(loadedContent) */

    });
    // console.log(loadedContent);
    // loadedIndex+=1;
  }
}

addElements();

container.addEventListener('scroll', () => {
	addElements();
});