大家好,我是Kason。近年来,前端领域涌现了很多新兴的前端框架,比如Qwik、Svelte、Astro等,这些框架大多面向“前端工程师”。那么,以“后端工程师”为受众的前端框架到底是什么,他和前者有什么区别呢?简介htmxhtmx是最近Django技术栈中比较流行的前端框架。他的理念是——“让网页回归HTML本质,不再受JS束缚”。是不是很web1.0风格?他是怎么做到的呢?答案是:通过大量预制的自定义HTML属性。将htmx.org.js导入页面后,您可以在HTML中编写以hx-开头的自定义属性。例如下面的代码:点我请求数据点击按钮(hx-trigger指定的点击事件)后,数据接口(hx-post规范)发起post请求。如何显示请求返回的数据?让我们再添加2个自定义属性:Clickmetorequestdatahx-target指的是“返回的HTML结构”将被注入的位置。这将被注入到“id为parent-div的DOM”中。hx-swap指的是“返回的HTML结构将以何种形式注入”。这将直接替换“id为parent-div的DOM”。如果hx-swap="innerHTML",则表示将以“id为parent-div的DOM”的innerHTML形式注入。如果要表达复杂的逻辑,需要组合很多自定义属性和属性值,比如下面的代码:当输入触发keyup事件,值发生变化时,延迟500ms发送到trigger_delay接口,返回的HTML结构为注入“id是DOM中的搜索结果”。与其说htmx是一个前端框架,不如说它应该是一个“HTML自定义属性工具库”更合适。他将很多常见的JS交互逻辑汇聚到自定义的HTML属性中,从而减少JS代码量。现代前端框架通常是“状态驱动的UI”,而htmx的概念是“进程驱动的UI”(类似于jQuery时代的页面编写方式)。如果要引入state,需要以插件的形式引入alpine-morph。对比:React:基于JSX。Vue:基于模板语法。alpine是一个基于HTML的前端框架。这意味着使用alpine需要直接在HTML中编写状态作为自定义属性(类似于Vuev1)。因此,他可以很好的融入到htmx系统中。例如,下面一段代码是一段结合了htmx和alpine的HTML,其中htmx属性以hx-开头,alphine属性以x-开头: