Вопросы и ответы
Примечание
Если вы ищете ответ на конкретный вопрос, используйте комбинацию клавиш Ctrl + F для поиска по странице (в macOS — Cmd + F).
Общие вопросы о DivKit
Что такое DivKit?
Кроссплатформенная библиотека, основанная на подходе Server-Driven UI, которая позволяет строить пользовательский интерфейс приложений и сайтов на основе описания верстки в формате JSON.
Что такое Server-Driven UI?
Концепция разработки, в которой верстка страниц и приложений формируется на сервере. Затем описание верстки передается на клиент, где на основе этого описания автоматически отрисовывается пользовательский интерфейс.
Такая концепция позволяет:
- Изменять внешний вид приложения и добавлять новые визуальные элементы без выпуска новой версии приложения.
- Использовать одну и ту же верстку страницы на разных платформах.
Какие платформы поддерживает DivKit?
Клиентская часть DivKit поддерживает iOS, Android, Web.
Разрешено ли публиковать приложения на основе Server-Driven UI в сторах Apple и Google?
Правила AppStore и Google Play не запрещают обновлять пользовательский интерфейс приложений на основе данных, полученных с сервера, при условии, что эти обновления не меняют первоначальный смысл приложения.
Можно ли использовать DivKit в коммерческих приложениях?
Да. DivKit — это библиотека с открытым исходным кодом, выпущенная под лицензией Apache License, Version 2.0.
Насколько быстро работает DivKit?
По нашему опыту, отрисовка «тяжелых» страниц в среднем занимает менее 16 миллисекунд. DivKit работает многопоточно и может повторно использовать ранее отрисованные элементы. Это позволяет быстро просчитывать текстовые элементы (например, большие объемы текста или таблицы) и в целом ускорить работу интерфейса.
Вопросы о разработке с помощью DivKit
Откуда берутся данные для карточек?
Описание карточки в формате JSON можно хранить на сервере или локально на устройстве.
Чтобы генерировать описания верстки карточек в формате JSON, можно использовать библиотеку json-builder, которая доступна для Kotlin, TypeScript и Python.
Как должен выглядеть макет карточки?
Верстка карточки должна быть описана в формате JSON по определенной схеме.
Как быстро протестировать свою верстку?
Чтобы подготовить JSON-описание верстки и увидеть превью карточки в веб-формате, можно использовать DivKit Web Playground. Затем вы можете передать ваш JSON-файл в приложение DivKit Playground для Android или iOS и посмотреть, как верстка отображается на мобильном устройстве.
Как реализовать интерактивные элементы (переходы, действия, нажатия)?
DivKit поддерживает действия, которые можно вызывать при нажатии на элемент. С помощью действий можно менять состояние элементов, дозагружать данные или вызывать обработчики событий, которые реализованы на уровне приложения-хоста.
Также DivKit поддерживает использование переменных и триггеров. Триггер срабатывает при изменении значения переменной и вызывает одно или несколько действий.
Можно ли менять верстку на основе динамических данных?
Да, например с помощью переменных. Если значение какого-либо свойства задано через переменную, при изменении переменной представление будет перестраиваться.
Как обрабатывается логика (например, действия при изменении значений полей)?
Логику можно обрабатывать с помощью переменных, вычисляемых выражений и триггеров. Также DivKit содержит набор функций для работы со строками, датами и числами.
Например, если пользователь ввел текст в поле, это значение можно передать в переменную. При изменении значения переменной срабатывает триггер и вызывает определенное действие.
Есть ли поддержка анимации?
Да, DivKit поддерживает несколько видов анимации: переходы при переключении состояний, нажатия на кнопки, а также появление и исчезновение элементов.
Можно ли использовать DivKit для верстки отдельных экранов приложения?
Да, можно. Например, в приложениях Яндекса часто карточки DiKit интегрируют на один или несколько экранов.
Можно ли реализовать форму для ввода данных?
Да, для этого используйте элемент div-input, который предназначен для ввода текста.
Есть ли поддержка accessibility (доступности)?
Да, в DivKit существуют элементы, которые обеспечивают доступность для людей с ограниченными возможностями.
Есть ли поддержка локализации?
Специальные механизмы локализации не предусмотрены. Чтобы локализовать элементы интерфейса, сформируйте отдельные JSON-файлы верстки для каждого языка.
Как работает серверная часть (бэкенд)?
У нас нет готового решения, с помощью которого можно развернуть сервер. DivKit содержит библиотеки для формирования JSON-файлов верстки, которые вы можете интегрировать в свой сервер.
Как реализовать светлую и темную темы?
Используйте переменные. Например, с сервера можно получать палитру в виде комбинации двух цветов для каждого элемента. На стороне клиента следует выставить переменные, которые обозначают, какие цвета использовать для элементов.
Как правильно логировать карточки?
Для правильного логирования параметр log_id
должен быть уникальным. Например, при логировании карточек в карусели у каждой карточки должен быть свой log_id
, иначе залогирована будет только первая карточка, а все остальные будут считаться дублями.
Как отключить анимацию действия?
В элементе animation укажите "name": "no_animation"
.
Как создать карточку с Lottie-анимацией?
Чтобы добавить Lottie-анимацию, в элементе image задайте массив extensions
. Подробнее см. в разделе Кастомизация.
Как создать пустой блок?
Если нужен блок, который будет просто занимать место, то используйте элемент separator и укажите для него прозрачный цвет в параметре color
.
Можно ли создавать контейнеры с одним элементом?
Не стоит, это отразится на производительности. Постарайтесь не создавать лишних оберток.
Узнать больше
Следите за новостями DivKit в Telegram-канале: http://t.me/divkit_news.
Также вы можете обсуждать интересующие вас темы в сообществе пользователей DivKit в Telegram: https://t.me/divkit_community_ru.