Skip to content

Record (Запросы API) / Продвинутые настройки

В этом разделе мы разберём расширенные возможности работы с Record. Если базовое использование ограничивается простыми вызовами API, то здесь будут рассмотрены ситуации, когда требуется гибкая настройка поведения запросов, а также оптимизация под конкретные сценарии.

Ограничение запроса, одним активным

Метод .oneRequestAtTime() ограничивает выполнение только одним активным запросом одновременно.

  • Если запрос уже выполняется, повторный вызов не запускает новый, а возвращает ссылку на текущий.
  • Это помогает избежать "дублирующих" запросов при быстрых кликах или множественных обновлениях состояния.
ts
import { Record } from "nuxoblivius";

const posts = Record.new("/api/posts", []);

posts.oneRequestAtTime();
ts
import { Record } from "nuxoblivius";

const posts = Record.new("/api/posts", []);

posts.oneRequestAtTime(false);

Таким образом, вы гарантируете, что в каждый момент времени выполняется ровно один запрос.

Отправлять запрос, только если нет данных

Особенности: Не поддерживает SSR

Метод .onlyOnEmpty() разрешает выполнять запрос только в том случае, если у текущего Record ещё нет данных.

  • Если данные уже загружены, новый вызов запроса проигнорируется.
  • Особенно полезно для кэшированных или одноразовых запросов, когда нет необходимости повторно обращаться к серверу.
ts
import { Record } from "nuxoblivius";

const posts = Record.new("/api/posts", []);

posts.onlyOnEmpty();
ts
import { Record } from "nuxoblivius";

const posts = Record.new("/api/posts", []);

posts.onlyOnEmpty(false);

Такой подход снижает нагрузку на сервер и ускоряет работу приложения за счёт повторного использования уже полученных данных.

Регулирование отчистки данных, во время запроса

Метод .swapMethod() управляет тем, когда реактивный response должен обновляться в процессе выполнения запроса.

Доступные режимы:

  • greedyреактивный response обновляется сразу после отправки запроса. Полезно, если нужно мгновенно показать состояние (например, сбросить список при фильтрации).
  • lazy — используется для работы с дополнительными модулями (кэширование, взаимствование). Работает как greedy, но если ни один модуль не предоставит данные, response откатывается к значению по умолчанию.
  • hotреактивный response обновляется только после завершения запроса. Это стандартное и безопасное поведение: данные меняются, только когда есть результат.
ts
import { Record } from "nuxoblivius";

const posts = Record.new("/api/posts", []);

posts.swapMethod("hot");
ts
import { Record } from "nuxoblivius";

const posts = Record.new("/api/posts", []);

posts.swapMethod("lazy");
ts
import { Record } from "nuxoblivius";

const posts = Record.new("/api/posts", []);

posts.swapMethod("greedy");

Таким образом, можно гибко контролировать момент подмены реактивных данных в зависимости от сценария.

Конкатенация данных

Метод .appendsResponse() позволяет управлять тем, как будут обновляться данные, если ответ от сервера имеет формат массива.

  • По умолчанию новые данные заменяют текущий массив.
  • Если включить .appendsResponse(), новые данные будут добавляться в конец списка.

Это особенно удобно для реализации постраничной подгрузки (infinite scroll).

ts
import { Record } from "nuxoblivius";

const posts = Record.new("/api/posts", []);

posts.appendsResponse();
ts
import { Record } from "nuxoblivius";

const posts = Record.new("/api/posts", []);

posts.appendsResponse(false);

Таким образом, Record можно использовать как основу для бесконечной ленты данных.

Динамическая перезагрузка данных

Особенности: Не поддерживает SSR

Метод .reloadBy() позволяет автоматически перезапускать запрос при изменении указанной реактивной переменной.

Это удобно, когда данные напрямую зависят от состояния интерфейса или параметров фильтрации.

ts
import { Record } from "nuxoblivius";
import { shallowRef } from "vue";

const someFilter = shallowRef("value");

const posts = Record.new("/api/posts", []);

posts.reloadBy(someFilter, { componentScope: false });
ts
import { Record } from "nuxoblivius";
import { shallowRef } from "vue";

const someFilter = shallowRef("value");

const posts = Record.new("/api/posts", []);

posts.reloadBy(someFilter);
// или
posts.reloadBy(someFilter, { componentScope: true });
ts
import { Record } from "nuxoblivius";
import { shallowRef } from "vue";

const someFilter = shallowRef("value");

const posts = Record.new("/api/posts", []);

const cancelAutoReload = posts.reloadByControlled(someFilter);
cancelAutoReload();

Таким образом, Record всегда будет содержать актуальные данные в зависимости от значения реактивной переменной.

Авторизация

Метод .auth() задаёт заголовок Authorization для текущего Record. Используется для работы с API, которые требуют авторизацию.

Кроме того, в Record предусмотрены статические методы для удобной генерации стандартных схем:

  • Record.Basic(login, password) — создаёт заголовок Basic ...
  • Record.Bearer(token) — создаёт заголовок Bearer ...
ts
import { Record } from "nuxoblivius";

const posts = Record.new("/api/posts", []);

posts.auth(Record.Bearer("some_token_value"));
ts
import { Record } from "nuxoblivius";

const posts = Record.new("/api/posts", []);

posts.auth(Record.Basic("login", "password"));
ts
import { Record } from "nuxoblivius";

const posts = Record.new("/api/posts", []);

posts.auth(null);

Таким образом, можно быстро подключать разные схемы авторизации без ручной сборки строки.

Глобальный хук SetDefaultAuth()

Метод SetDefaultAuth(), позволяет глобально всем Record, задать заголовок Authorization.

ts
import { SetDefaultAuth } from "nuxoblivius";

SetDefaultAuth("some_auth_data");
ts
import { SetDefaultAuth } from "nuxoblivius";

SetDefaultAuth(() => "some_auth_data");

Общий сброс данных

Метод .reset() позволяет одной командой сбросить состояние Record частично или полностью. Это упрощает управление жизненным циклом данных, особенно при работе с фильтрами, пагинацией и динамическими параметрами.

Параметры config:

  • pagination: boolean — сброс пагинации к начальному состоянию.
  • response: boolean — очистка текущего ответа и возврат к значению по умолчанию.
  • query: boolean — очистка динамических query-параметров (аналог метода .clearDynamicQuery()).

По умолчанию все параметры установлены в false.

ts
import { Record } from "nuxoblivius";

const posts = Record.new("/api/posts", []);

posts.reset({ pagination: true, response: true, query: true });

Таким образом, .reset() позволяет гибко контролировать и обнулять нужные части состояния Record.

Отмена запроса ^1.7.17

Иногда возникает необходимость прервать запрос: например, при уходе пользователя со страницы, переключении вкладок, который делает старый запрос неактуальным.

В Nuxoblivius для этого предусмотрены методы:

.abortRequests(abortCode)

Отменяет текущие запросы у конкретного Record.

В обработчик .onFailure() дополнительно передаётся информация:

  • что ошибка вызвана именно абортом;
  • код аборта (abortCode) для идентификации причины.
ts
import { Record } from "nuxoblivius";

const posts = Record.new("/api/posts", []);

posts.abortRequests(401);

tryAbortAllRequest(abortCode)

Отменяет все активные запросы у всех Record одновременно.

Полезно, если нужно быстро остановить все фоновые операции, например при глобальном logout.

ts
import { tryAbortAllRequest } from "nuxoblivius";

tryAbortAllRequest(401);

Таким образом, система абортов помогает гибко контролировать запросы и предотвращать гонки данных.

2023-2025 Power tool for creating project with Enjoy!