Как логически решить такую задачу?

Всем привет, задача вроде простая, но на фоне того, что нет технического мышления/плохо развита логика и в дагонку я учу реакт недавно, просто сижу час и не могу ничего придумать.
https://codesandbox.io/s/priceless-flower-gedylk?f...
вот демка, сырая, но я думаю она передаст смысл того, что мне нужно
введите в запрос 'k'
И так, что тут происходит. Делается с запрос к гитхаб апи и он возвращает 30 репозиториев пользователя. (всего их у пользователя с ником к 88 штук)
Я репозитории вывожу по 4 штуки на страницу
const lastReposIndex = page * pageSize;
    const firstReposIndex = lastReposIndex - pageSize;
    setCurrentRepos(repos.slice(firstReposIndex, lastReposIndex));

**page - текущая страница
**pagesize - количество элементов которое я вывожу на страницу (4)
Проблема в том, что когда я пролистываю n-кол-во страниц и репозитории кончаются (30 штук, но всего их больше) мне надо сделать запрос повторно с номером другой страницы к гитхаб апи и получить еще 30 страниц. Дак вот, я не понимаю, как мне это делать
я единственное, что придумал
if(currentRepos.length < 4) {
      console.log('menshe')  (тут запрос)
    }

делать так, но у меня currentRepos получается всегда меньше 4, ну это не удивительно, потому индексы страниц его слайсят под ноль

а больше вроде и нет никаких стейтов, которые меняются
ну у меня есть мысли как это сделать с каким-нибудь внешним массивом, в который можно пушить полученные элементы, но это костыль какой-то
  • Вопрос задан
  • 80 просмотров
Решения вопроса 1
FairyTaleComposer
@FairyTaleComposer
Чтобы получить следующую порцию записей, указываете в параметрах запроса per_page и page. Per_page это количество записей, которое Вам выдаст гитхаб (у вас это pageSize), page - количество этих per_page, которое нужно пропустить. Всё, что Вам нужно, это обновлять page. То есть для запроса следующей страницы нужно к текущему значению page прибавить per_page.

Чтобы проверить, есть ли куда листать -- проверяете пришедший с гитхаба total_count. Это кол-во записей всего по Вашему запросу.
if (page * per_page + per_page < total_count) { листаете }
Для наглядности: если укажете, например, page=2, per_page=4, github пропустит 8 репозиториев.

Чуть не забыла - в гитхабе page отсчитывается по умолчанию с единицы, а не с нуля.

Подробнее в документации: https://docs.github.com/en/github-ae@latest/rest/g...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы