Skip to content

Работа с данными

Базовый поток начинается с Query и заканчивается потребителем данных.

Получение данных

Query описывает transport, авторизацию, тело запроса и именованные outputs. Он не выбирает Store и не пишет в произвольный путь состояния.

ts
defineQuery({
  kind: 'rest',
  request: {
    endpoint: env('ENDPOINT_API'),
    path: '/items',
    method: 'GET',
  },
  outputs: {
    raw: output().from(response()),
  },
})

Внешние справочники объявляются отдельно через Vocab. Приложение может загрузить обязательный справочник вручную built-in Action после авторизации, а Composition — активировать только зависимости своего root или lifecycle scope:

ts
data: {
  airlines: vocab('airlines'),
  stations: vocab('stations').policy({
    strategy: 'stale-while-revalidate',
    maxAgeMs: 300_000,
    onError: 'use-cache',
  }),
}

Значения остаются в общем Raph-кеше и не копируются в Composition. Подробно: Справочники (Vocab).

Component SFC читает объявленный alias напрямую из runtime-контекста:

vue
<Select
  :value="flight.flightCarrier"
  :options="vocab('airlines', {
    valuePath: 'code',
    labelPath: 'description',
  })"
/>

Передавать airlineOptions через defineProps для этого не нужно. Composition загружает dependency до создания runtime-ноды, а Component host подписывается на общий cache path и повторяет render при обновлении справочника.

Подготовка данных

Если форма ответа не подходит компоненту, добавьте DataView. Преобразование должно быть отдельным, повторяемым этапом, а не скрытой логикой визуального компонента.

Материализация

Composition связывает output с конкретным Store или передаёт его следующему потребителю. Так один Query можно использовать в нескольких сценариях хранения и отображения.

Проверка

  • Проверьте окружение и endpoint.
  • Проверьте входные props и сформированное тело запроса.
  • Посмотрите сырой response до преобразования.
  • Затем проверьте каждый output и DataView по отдельности.

Подробный контракт: Query, DataView и Справочники (Vocab).