HTMX 出现在2020 年,创建者Carson Gross 说htmx 来源自他于2013 年研究的一个项目intercooler.js。并将其重命名为htmx。 然后他惊讶的发现Django 社区迅速并戏剧性地接受了它!HTMX的主要思想是在不牺牲性能的前提下,通过利用现有的Web技术,使得前端开发变得更加简单和灵活。它通过在HTML标记中添加一些自定义属性,如hx-get、hx-post等,来定义与后端的交互方式。
什么是HTMX
HTMX是一种用于构建交互式Web应用程序的工具,它通过在前端利用现有的HTML、CSS和JavaScript技术,以及在后端使用标准的HTTP和服务器端处理,实现了快速、简单的开发方式。HTMX的目标是简化Web开发,让开发者更轻松地添加动态、实时的功能,而无需使用复杂的前端框架或库。支持多种后端语言,包括Python、Ruby、Java等,因此可以与各种服务器端技术无缝集成。它的设计目标是提供一种简便而强大的工具,使得开发者能够更快速地构建出富有交互性和实时性的Web应用程序。 先看一个实例:
当点击时,浏览器会向 /blog 发送一个HTTP GET请求,并将响应加载到浏览器窗口中。这是HTMX背后的基本概念。它仅仅通过在HTML中直接处理更复杂的事件和交互能力,扩展了这个基本功能。HTMX允许任何HTML元素发起HTTP请求,与传统HTML不同,传统HTML中只有表单和锚元素能够这样做。它还允许任何事件,而不仅仅是点击或表单提交,触发请求。HTML元素可以作为这些请求的目标进行更新,而且可以在HTML标记中使用任何HTTP动词(GET、POST、PUT、DELETE等)。
在上面实例中,当用户点击div时,会触发一个POST请求到 /clicked,随后用来自服务器的响应替换掉这个div。
HTMX的核心属性
HTMX的核心属性,允许你直接从HTML发起AJAX请求。当元素被触发时,它会向指定的URL发送指定类型的请求。
在上面例子中,当用户点击div时,会发送一个PUT请求到/messages,将响应加载到div中。默认情况下,AJAX请求是由元素的自有事件触发的(例如,对于输入框、文本区域和选择框来说是change事件,对于表单来说是submit事件,对于其他元素来说是click事件)。你可以使用hx-trigger属性来修改这种行为,以指定触发请求的事件。
HTMX的高级属性
HTMX通过使用hx-trigger属性在HTML中提供了一种简单的设置轮询的方式:
上面例子中div将每2秒发起一次GET请求到/news,并将响应加载。HTMX还有一种称为“load polling”的技术,其中一个元素通过用服务器响应替换自身,以指定的间隔不断向URL进行“轮询”:
HTMX 事件
HTMX触发了各种事件,你可以监听这些事件,并在它们发生时采取相应的操作。包含:
- htmx:configRequest:在发送AJAX请求之前触发。
- htmx:afterSwap:接收到响应后触发。
HTMX提供了一种有效的方式,利用原生浏览器功能执行AJAX请求,从而实现现代、快速和动态的前端开发。通过扩展HTML,它允许开发者创建高度交互的用户界面,而无需大量使用JavaScript,因此更贴近原始的Web编程模型。