how to use useSWR to handle paginated request

Viewed 113

I am new to useSWR, and I have to fetch a list of items calling some endpoint which returns paginated response

const listItems = (id: String) => {
  const [nextToken, setNextToken] = useState(undefined);
  const [items, setItems] = useState([]);

  const input = useMemo(() => {
    return { id, nextToken }
  ,[nextToken]);

  const data = useSWR('listItems', promisify(listItems(input)));

  useEffect(() => {
    if (!data) return;
    setItems(items.concat(data.items));
    setNextToken(data.nextToken);
  }, [data]);

  return {
    items
  };
}

In the test file, I mock listItems as follows

mockListItems
 .mockImplementationOnce(() => {
   promise: () => Promise.resolve(item1)
 })
 .mockImplementationOnce(() => {
   promise: () => Promise.resolve(item2)
 })

However, the test fails because it only returns item1. What went wrong here?

0 Answers
Related