htmx是可组合的插件系统


很容易在HTMX中开发一个强大的插件系统。人们曾认为 JSON 驱动的 REST API 是构建可组合 Web API 的唯一方法。
现在,HTMX 将后端和前端融合成一个整体组件。

htmx 的可组合性
htmx 的可组合性体现在其能够轻松地与其他技术和库集成,以构建灵活、模块化的 Web 应用程序。

以下是 htmx 的一些可组合性的方面:

  1. 与现有框架集成: htmx 不依赖于特定的后端或前端框架,因此你可以将其与你喜欢的框架一起使用。它可以与各种服务器端框架(如Django、Flask、Express等)协同工作,也可以与不同的前端框架(如Vue.js、React等)一起使用。
  2. 模块化的行为: htmx 允许你通过在 HTML 元素上添加属性(例如 hx-get、hx-post、hx-trigger)来定义其行为。这使得你可以轻松地定义和组合不同的行为,例如异步加载内容、表单提交等。这种模块化的设计使得你可以在应用程序中重复使用这些行为。
  3. 自定义事件和扩展: htmx 提供了自定义事件的机制,你可以监听并响应特定的 htmx 事件。这使得你可以在不同的组件之间进行通信,并根据需要执行自定义操作。此外,你还可以编写自定义扩展,以满足特定的需求,从而增强 htmx 的功能。
  4. 支持标准的 HTTP 语义: htmx 遵循标准的 HTTP 语义,可以使用 GET、POST、PUT、DELETE 等请求方式。这使得它可以与现有的 RESTful API 或后端服务进行集成,而无需特殊的配置。
  5. 无侵入性: 使用 htmx 时,你无需改变你的后端逻辑,也无需全面重构前端代码。你可以逐步引入 htmx,通过在需要的地方添加相应的属性,逐步增强你的应用程序。

前后端组装
htmx 的目标之一是将后端和前端融合成一个整体组件,实现前后端的紧密协作。

以下是一些 htmt 的特性和方法,它们有助于将后端和前端整合为一个统一的组件:

HTML 属性定义行为: htmx 使用在 HTML 元素上添加的属性来定义它们的行为。通过属性如 hx-get、hx-post、hx-trigger 等,你可以明确指定元素的交互方式,例如从后端获取数据、发送 POST 请求等。这种在 HTML 中定义行为的方式使得前端代码更为清晰,同时保留了后端的控制权。

<!-- 例如,通过 hx-get 属性从后端获取数据并刷新元素内容 -->
<div hx-get="/api/data" hx-target="result">Click me</div>

数据属性传递: htmx 支持通过 hx-vars 属性将数据从后端传递到前端。这样,你可以在请求时发送额外的数据,以便后端可以根据需要进行处理。这为前后端之间的数据传递提供了一种简单而强大的机制。

<!-- 通过 hx-vars 属性传递数据给后端 -->
<form hx-post="/api/submit" hx-vars="myForm">...</form>

自定义事件: htmx 提供了自定义事件的支持,使得你可以在前后端之间进行事件通信。通过监听 htmx 事件,你可以在特定的交互发生时执行自定义的前端脚本或后端操作。

document.body.addEventListener('htmx:afterSwap', function(event) {
  // 在交互完成后执行自定义操作
});

模块化和组件: htmx 的设计允许你创建可组合的模块,将特定的功能包装成组件。这使得你可以在应用程序中重用这些组件,从而促进了前后端的组件化开发。

无侵入性: 使用 htmx 时,你不需要修改现有的后端逻辑。你可以逐渐引入 htmx,通过在需要的地方添加相应的属性,使得前后端的整合变得相对无缝。

htmx的胶水特性
htmx 被描述为一种胶水(glue)库,因为它在前端和后端之间充当一种粘合剂,帮助将它们整合成一个统一的整体。以下是 htmx 的一些胶水特性:

  1. 声明性 HTML: htmx 使用 HTML 属性来定义元素的行为,而不是通过编写大量的 JavaScript 代码。这种声明性的方法使得前端逻辑更为清晰,同时将关注点从 JavaScript 转移到 HTML,使得前端和后端的协同更加直观。

<!-- 通过在 HTML 中声明行为,将后端和前端整合在一起 -->
<button hx-get="/api/data" hx-target="result">Click me</button>

  1. 自动化: htmx 提供了自动处理许多常见的前端任务的机制,如局部刷新、表单提交、DOM 更新等。这样,开发者无需手动编写大量的 JavaScript 代码,而是通过简单的 HTML 属性即可实现这些功能。这种自动化有助于减少重复性的代码,提高开发效率。
  2. 无侵入性: 引入 htmx 不需要重构整个应用程序。你可以逐步引入 htmx,通过在需要的地方添加相应的属性,而无需改变现有的后端逻辑。这种无侵入性使得你可以在已有项目中渐进地采用 htmx。
  3. 简化 AJAX: htmx 简化了使用 AJAX 进行前后端通信的过程。通过在 HTML 元素上添加 hx-get、hx-post 等属性,你可以定义元素的行为,而不必手动编写 AJAX 请求的 JavaScript 代码。这样可以减少样板代码,使得代码更为简洁。

<!-- 简化的 AJAX 请求 -->
<div hx-get="/api/data" hx-target="result">Click me</div>

HTMX 作为配置
Htmx更像是一种配置语言,包含所有部分如何组合在一起的说明。

Htmx有状态,但它隐藏在解释声明性配置的引擎(也称为浏览器)中。

多年前,在 .NET 和 Java 中,流行使用具有 XML 配置的控制反转容器来声明和配置不同的类和对象。它们很大程度上已经过时了,因为很复杂,或者至少比它需要的更复杂。

用 HTMX 编写的 HTML 感觉有点像 IoC 配置,它描述了所有程序组件如何组合在一起。
但它更实用,因为它还描述了 UI 的布局方式。

当将其视为配置时,很清楚为什么在其中创建插件系统很容易。

它是一个插件系统。