Как создать нумерацию страниц в Redux из массива, полученного API - PullRequest
0 голосов
/ 31 марта 2019

Я хочу создать нумерацию страниц для элементов, полученных Hacker News API.Полученные данные содержат 500 идентификаторов историй и отображают элементы 10 на странице

Насколько мне известно, API не имеет нумерации страниц на стороне сервера

Пока что я получаю данные в избыточном виде

axios
      .get(`${API_URL}/topstories.json`)
      .then(response => {
        dispatch(getAllTopStoriesIsLoading(false));
        dispatch(getAllTopStoriesSuccess(response.data));

        const itemsPerPage = 10;
        const itemCount = response.data.length;
        const totalPages = Math.ceil(itemCount / itemsPerPage);
      })

Я пытался установить цикл for внутри .then

let startIndex = 0;
for (let i = 1; i <= totalPages; i + 1) {
  itemsOnPage = response.data.slice(startIndex, startIndex + itemsPerPage)
  startIndex += itemsPerPage;
}

Это приводит к бесконечному циклу.

Я хотел бычтобы элементы хранились в магазине редуксов как

pages: {
1: [ {...}, {...}, {...}],
2: [...],
...
}

или аналогичные

1 Ответ

0 голосов
/ 01 апреля 2019

Попробуйте это решение:

axios
  .get(`https://hacker-news.firebaseio.com/v0/topstories.json`)
  .then(response => {
    //dispatch(getAllTopStoriesIsLoading(false));
    let page = 1;
    const itemsPerPage = 10;
    const responData = {};
    response.data.map(item => {
      if (!responData[page]) {
        responData[page] = [];
      } else if (responData[page].length >= itemsPerPage) {
        current++;
        responData[page] = [];
      }
      responData[current].push(item);
    });
    console.log('===responData===', responData);
    //dispatch(getAllTopStoriesSuccess(responData));
  });
...