РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
⊗jsnuSpRqInr 8 of 90 menu
◀ ▶

Введение в свои запросы в Nuxt

В основном учебнике мы загружали данные через функцию useFetch. Ей достаточно одного URL: Nuxt сам выполняет запрос, сохраняет JSON и отдаёт его вместе с HTML, чтобы браузер не повторял ту же работу после гидратации.

На практике странице часто нужно больше, чем один готовый ответ по адресу. Может понадобиться обратиться к двум разным API и собрать результат в один объект. Или взять JSON с сервера, но перед выводом оставить только нужные поля, а не всю структуру записи. В таких случаях в URL передавать нечего - нужна своя логика загрузки.

Для этого в Nuxt есть функция useAsyncData. Первый аргумент задаёт ключ, под которым результат будет храниться между сервером и клиентом. Второй аргумент - функция-обработчик: любая async-функция, которая возвращает данные для страницы. Внутри неё можно вызывать $fetch, ждать несколько обещаний через Promise.all или комбинировать шаги как удобно.

Обработчик выполняется на сервере при первом рендере так же, как запрос внутри useFetch: готовый результат попадает в ответ и передаётся в браузер. Клиент получает уже заполненные данные и не дублирует тяжёлую работу ради первого экрана. После гидратации к тем же данным можно обращаться из шаблона и из setup через поле data, как при обычной загрузке по URL.

Отличие от useFetch не в механизме доставки на клиент, а в форме задачи. useFetch заточен под один HTTP-адрес. useAsyncData оборачивает произвольную асинхронную работу, когда итог страницы собирается из нескольких шагов или из ответа, который нужно привести к удобному виду до вывода.

В примерах раздела снова воспользуемся открытым API JSONPlaceholder: списки пользователей и постов по простым адресам, без собственного бэкенда. Там, где в задачах фигурируют товары, заказы или города, подберём другие тестовые адреса или поля из тех же ответов, чтобы закрепить приём, а не запоминать конкретный домен.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить