Прежде всего, вы запускаете несколько асинхронных вызовов одновременно. Я не знаю, если это то, что вы хотите сделать, но учтите, что они могут разрешаться в другом порядке, в котором вы их называете (т.е. запрос на страницу 3 может закончиться sh до запроса на страницу 1).
Теперь с вопросом оператора распространения. Вы обновляете состояние, вызывая setCelebrities
с формой обратного вызова. Ваше состояние celebrities
является массивом, поэтому вы хотите обновить его с помощью массива.
setCelebrities(celebs => [
...celebs,
...res.data.results
])
С помощью этого кода вы создаете новый массив, где первая часть - это элементы, которые у вас уже были (вот почему вы Нужно использовать оператор распространения, поэтому элементы, которые у вас были, деструктурированы) и результаты, которые вы получаете от API (который также является массивом, поэтому вам нужно деструктурировать). Если вы не разберетесь с ними, у вас получится массив массивов.
Если вы не хотите использовать оператор распространения, вы можете использовать метод concat
:
setCelebrities(celebs => celebs.concat(res.data.results));