Skip to content

Commit

Permalink
Avoid rerender children element on infinite scroll
Browse files Browse the repository at this point in the history
  • Loading branch information
sim51 committed Jul 10, 2023
1 parent 7bc11a1 commit 06c27f8
Showing 1 changed file with 5 additions and 3 deletions.
8 changes: 5 additions & 3 deletions src/components/InfiniteScroll.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { ReactNode, useCallback, useState, useEffect } from "react";
import { ReactNode, useCallback, useState, useEffect, useMemo } from "react";
import InfiniteScrollComponent from "react-infinite-scroll-component";

import { LoaderFill } from "./Loader";
Expand Down Expand Up @@ -27,9 +27,11 @@ export function InfiniteScroll<T>({ data, renderItem, pageSize, scrollableTarget
}, [data, pageSize]);

useEffect(() => {
setItems(data.slice(0, pageSize || DEFAULT_PAGE_SIZE));
setItems(data.length > 0 ? data.slice(0, pageSize || DEFAULT_PAGE_SIZE) : []);
}, [data, pageSize]);

const visibleItems = useMemo(() => items.map((data) => renderItem(data)), [renderItem, items]);

return (
<InfiniteScrollComponent
scrollableTarget={scrollableTarget}
Expand All @@ -38,7 +40,7 @@ export function InfiniteScroll<T>({ data, renderItem, pageSize, scrollableTarget
loader={<LoaderFill />}
next={next}
>
{items.map((data) => renderItem(data))}
{visibleItems}
</InfiniteScrollComponent>
);
}

0 comments on commit 06c27f8

Please sign in to comment.