Включение элементов с hx-include
HTMX предоставляет удобный способ динамического обновления контента
на странице. Одна из ключевых возможностей библиотеки — это механизмы,
которые позволяют загружать данные или HTML из других источников и
вставлять их в нужные части страницы без перезагрузки. Одним из таких
механизмов является атрибут hx-include.
Атрибут hx-include позволяет задать дополнительные
элементы, которые будут включены в запрос, отправляемый HTMX. Обычно
запросы в HTMX ограничиваются только тем содержимым, которое связано с
элементом, инициирующим запрос (например, кнопкой или ссылкой). Однако с
помощью hx-include можно дополнительно указать элементы,
данные из которых должны быть отправлены вместе с запросом.
Этот атрибут полезен в случаях, когда нужно отправить дополнительную информацию с запросом, которая не привязана напрямую к элементу, инициирующему запрос. Например, это может быть форма, скрытая на странице, или другие элементы, которые содержат важные данные, но не взаимодействуют непосредственно с пользователем.
hx-include?Когда элемент с атрибутом hx-include включен в запрос,
HTMX добавляет данные этих элементов в запрос, как если бы они были
частью самого инициирующего элемента. Это позволяет передавать их на
сервер для обработки, даже если они физически находятся на другой части
страницы.
Допустим, есть форма с кнопкой отправки, которая загружает контент с сервера и вставляет его в элемент на странице:
<form id="search-form">
<input type="text" name="query" id="query" />
<button hx-post="/search" hx-target="#results" hx-include="#hidden-form-data">Поиск</button>
</form>
<div id="hidden-form-data">
<input type="hidden" name="user_id" value="1234" />
</div>
<div id="results"></div>
В этом примере кнопка отправляет запрос на сервер, который включает в
себя данные как из формы поиска, так и из скрытого элемента
#hidden-form-data. Хотя кнопка непосредственно связана с
формой поиска, hx-include гарантирует, что данные скрытого
поля с user_id также будут отправлены.
hx-include с несколькими элементамиМожно указать несколько элементов для включения в запрос, используя селекторы CSS, разделённые запятой. Это позволяет добавлять данные сразу из нескольких источников на странице.
<form hx-post="/update" hx-target="#update-status">
<input type="text" name="username" />
<button hx-include="#hidden-token, #hidden-id">Обновить</button>
</form>
<div id="hidden-token">
<input type="hidden" name="csrf_token" value="abc123" />
</div>
<div id="hidden-id">
<input type="hidden" name="user_id" value="5678" />
</div>
<div id="update-status"></div>
В данном примере при нажатии на кнопку данные с полями
username, а также значения из скрытых полей
csrf_token и user_id будут отправлены на
сервер.
hx-includeТипы данных Атрибут hx-include
отправляет данные в том же формате, что и данные инициирующего элемента.
Если это текстовые поля или другие формы, данные будут отправлены как
обычные пары ключ-значение.
Производительность Важно учитывать, что
использование hx-include может привести к отправке большого
объёма данных, особенно если указаны большие формы или несколько
элементов. Поэтому нужно быть внимательным к производительности,
особенно при работе с большими страницами.
Интерактивность Элементы, включённые через
hx-include, не должны влиять на поведение самой страницы до
того момента, пока не произойдёт запрос. Это значит, что, в отличие от
динамически изменяемых элементов, они не влияют на взаимодействие с
пользователем до отправки данных на сервер.
Одним из ключевых аспектов при работе с HTMX является способность
обновлять только определённые части страницы, что делает взаимодействие
с пользователем более плавным и быстрым. Использование
hx-include даёт возможность гибко управлять данными,
которые отправляются на сервер, позволяя делать интерфейс ещё более
динамичным и адаптированным под нужды приложения.
Когда на странице есть множество динамических элементов, которые
должны быть учтены в запросах, использование hx-include
помогает уменьшить дублирование кода и централизовать логику отправки
данных.