В новой форме для проекта ties автор применил прогрессивное улучшение. Форма редактирует закладку и привязывает её к спискам. Без JavaScript она работает как обычная HTML-форма, а с JavaScript подключается htmx и добавляет удобства.
Главная проблема — временное состояние. Пользователь что-то ввёл, но ещё не сохранил. Это состояние должно пережить запрос к серверу. В SPA оно лежит в памяти JS, а здесь приходится использовать классические HTML-механизмы. Самый простой из них — значения формы. Они отправляются на сервер, и сервер может вернуть их в ответе, чтобы пользователь не вводил заново. Минус: при перезагрузке значения пропадают, и они относятся только к одной форме. В форме ties две формы: одна для переименования, другая для назначения списков. Если пользователь без JS отправляет одну, вторая теряет свои значения — это решается через htmx.
Другой способ — хранить состояние в path или query-параметрах. Оно переживает перезагрузку, его можно сохранить в закладки или передать ссылкой. Так сделано для поиска списков. Задать параметры можно через href, action, метод GET или атрибут formaction у кнопки submit. formaction удобен тем, что меняет путь только при нажатии конкретной кнопки.
Ещё автор столкнулся с тем, что enter всегда отправляет первую кнопку формы. Чтобы enter в поиске списков не сработал как «переименовать», форму пришлось разбить на две. Для определения нажатой кнопки используй formaction или name/value на кнопке.
Прогрессивное улучшение автор строит так: сначала полностью делает фичу без htmx, чтобы не загнать себя в угол, а потом добавляет htmx. Например, живой поиск без нажатия enter и спиннер. Тестирует с отключенным JS или через hx-disable.
С hx-target всё сложнее. Слишком узкая замена страницы оставляет устаревшие данные, а out-of-band swaps кажутся хрупкими. Поэтому автор предпочитает обновлять всю страницу целиком. Иногда это теряет ввод пользователя, но редко.
Полезные ссылки: блог Александра Петроса Unplanned Obsolescence, статьи Less htmx is more, Who's Afraid of a Hard Page Load?, How I use HTMX with Go, Django + htmx patterns, If not React, then what?, книга Resilient Web Design и справочник Plain Vanilla Web.