Spec-Zone.ru › htmx

hx-pending

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

Расширение hx-pending показывает пользовательское содержимое, пока выполняется запрос. Когда приходит ответ (или возникает ошибка), ожидающее содержимое удаляется и заменяется настоящим ответом сервера.

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

Когда использовать

В большинстве случаев достаточно встроенной в htmx поддержки индикаторов: показывайте во время запросов спиннер или сообщение «Загрузка…». Используйте hx-pending, когда требуется больше контроля:

  • Скелетоны загрузки: показывайте заглушку, соответствующую форме ожидаемого содержимого
  • Ожидающие состояния с учётом данных: отображайте отправленные пользователем данные, выделяя их как «в процессе»
  • Оптимистичные обновления: сразу показывайте ожидаемый результат (для операций с низкой ценой ошибки, где откат не будет выглядеть резким)

Установка

<script src="https://cdn.jsdelivr.net/npm/htmx.org@4.0.0/dist/htmx.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/htmx.org@4.0.0/dist/ext/hx-pending.js"></script>

Основное использование

Добавьте hx-pending к любому элементу, который отправляет запрос, указав шаблон с ожидающим содержимым:

<ul id="messages">
    <li>Hello world</li>
</ul>

<template id="sending-template">
    <li class="pending">Sending...</li>
</template>

<form hx-post="/message" hx-target="#messages" hx-swap="beforeend" hx-pending="#sending-template">
    <input name="body" placeholder="Message...">
    <button type="submit">Send</button>
</form>

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

Стилизация ожидающего содержимого

Элемент с ожидающим содержимым получает класс hx-pending для стилизации:

.hx-pending {
    opacity: 0.6;
    font-style: italic;
}

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

Ожидающие состояния с учётом данных

Расширение захватывает параметры запроса (поля формы, hx-vals, hx-include) и задаёт их как атрибуты data-* ожидающего элемента. В сочетании с расширением hx-live можно отображать отправленные значения:

<template id="msg-template">
    <li class="pending">
        <strong :text="data.author"></strong>: <span :text="data.body"></span>
    </li>
</template>

<form hx-post="/message" hx-target="#messages" hx-swap="beforeend" hx-pending="#msg-template">
    <input name="author" value="You">
    <input name="body" placeholder="Message...">
    <button type="submit">Send</button>
</form>

Теперь пользователи сразу видят своё сообщение — оформленное как ожидающее, — пока оно отправляется. Это информативнее, чем спиннер, а оформление ясно показывает, что сообщение ещё не подтверждено.

Поля с несколькими значениями (флажки, списки с множественным выбором) сохраняются как массивы JSON: data-tags='["js","css"]'.

Licensed under the Zero-Clause BSD License.
https://four.htmx.org/extensions/hx-pending/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API