Дозагрузка данных и патчи

Карточку можно обновить частично, не загружая ее заново. Действие download запрашивает с сервера патч — описание изменений — и применяет его к элементам карточки.

Действие download

Для дозагрузки данных в виде patch и обновления текущего элемента укажите действие download:

div-action://download?url=<patch_url>

Параметр

Описание

url

Ссылка для получения патча.

В типизированном действии download можно сразу указать, что делать после загрузки:

{
  "log_id": "load_more",
  "typed": {
    "type": "download",
    "url": "https://example.com/patch.json",
    "on_success_actions": [
      {
        "log_id": "loaded",
        "url": "div-action://set_variable?name=is_loaded&value=true"
      }
    ],
    "on_fail_actions": [
      {
        "log_id": "load_failed",
        "url": "div-action://set_variable?name=has_error&value=true"
      }
    ]
  }
}

Параметр

Описание

url

Ссылка для получения патча.

on_success_actions

Действия при успешной загрузке.

on_fail_actions

Действия при неуспешной загрузке, если о ней сообщил хост или закончилось время ожидания.

Для действия в формате url те же действия задаются в поле download_callbacks.

Формат патча

Формат ответа:

{
  "patch": {
    // данные в формате patch
  },
  "templates": {
    // шаблоны, которые могут быть использованы в секции patch
  }
}

Секция patch описывается объектом patch:

Параметр

Описание

changes

Изменения элементов. Обязательный параметр. Каждое изменение содержит id — идентификатор элемента для замены или удаления — и items — элементы для вставки. Если items не задан, элемент удаляется.

mode

Порядок применения изменений:
- partial — применяются все возможные изменения, об ошибках сообщается (значение по умолчанию);
- transactional — если при применении хотя бы одного изменения произошла ошибка, изменения не применяются.

on_applied_actions

Действия после применения изменений.

on_failed_actions

Действия после ошибки применения изменений в режиме transactional.

Пример: замена элемента
{
  "patch": {
    "changes": [
      {
        "id": "placeholder",
        "items": [
          {
            "type": "text",
            "text": "Загруженный текст"
          }
        ]
      }
    ]
  }
}

Элемент с идентификатором placeholder заменяется текстом из items.

Загрузка патчей на платформах

  • Android: патчи загружаются через DivNetworkClient, если он настроен, см. Настройка сетевого стека. Собственный загрузчик — реализация DivDownloader — передается в DivConfiguration и имеет приоритет.
  • iOS: патчи загружает DivKitComponents. Собственный загрузчик — реализация протокола DivPatchProvider — передается в параметре patchProvider.
  • Web: параметры запроса задаются в параметре fetchInit функции render.

Узнать больше

Вы можете обсуждать интересующие вас темы в сообществе пользователей DivKit в Telegram: https://t.me/divkit_community_ru.

Репозиторий DivKit