Infinite Scroll

Loading more items...

Code

const [items, setItems] = useState([]);
  const [page, setPage] = useState(1);
  const loader = useRef(null);

  useEffect(() => {
    loadMoreItems();

    const handleObserver = _.debounce((entries) => {
      const target = entries[0];
      if (target.isIntersecting) {
        setPage((prevPage) => prevPage + 1);
      }
    }, 6000);

    const observer = new IntersectionObserver(handleObserver, {
      root: null,
      rootMargin: "20px",
      threshold: 1.0,
    });

    if (loader.current) {
      observer.observe(loader.current);
    }

    return () => {
      if (loader.current) {
        observer.unobserve(loader.current);
      }
    };
  }, []);

  useEffect(() => {
    if (page > 1) {
      loadMoreItems();
    }
  }, [page]);
  const loadMoreItems = async () => {
    const response = await fetch(
      `https://jsonplaceholder.typicode.com/posts?_page=1&_limit=10`
    );
    const newItems = await response.json();
    console.log("newitems", newItems);
    setItems((prevItems) => [...prevItems, ...newItems]);
  };