React vs HTMX ,谁更适合你?

HTMX是一个新兴的前端库,通过扩展HTML实现浏览器级别的交互,无需JavaScript。尽管起步较晚,但它在开发者社区中受到关注,尤其是在JavaScriptRisingStars评选中排名第二。本文对比了HTMX与React在语法、学习曲线、功能特性和生态系统的差异,指出两者各有优缺点,选择取决于项目需求和目标。
摘要由CSDN通过智能技术生成

HTMX 的终极目标目标,就是让开发者在 HTML 中就能实现现代浏览器级的交互性,而无需使用 JavaScript。这个前端库虽然起步晚,首次亮相是在 2020 年底,但却迅速吸引了开发者社区的眼球。

在 2023 年的 "JavaScript Rising Stars" "前端框架” 类别里,HTMX 排名第二,仅次于 React

图片

此外,HTMX 还在 GitHub 上收获了超过 20k 的 Star,它的受欢迎程度可见一斑。为什么人们对它那么热衷呢?它能否撼动 React 的前端霸主地位呢?让我们一起来做个对比吧!

简单对比

-HTMXReact
开发者Big Sky SoftwareMeta
开源
GitHub Star29k+218k+
文件大小2.9 kB6.4 kB
语法基于 HTML,带有自定义属性基于 JSX, Javascript 的扩展
目标直接在 HTML 中增加现代交互性特性提供一个基于组件的,功能全面的 JavaScript UI  库
学习曲线平滑陡峭
特性AJAX 请求以及一些其他次要特性可组合性,单向数据绑定,状态管理,Hooks 等之外的多种特性
性能极好良好,尤其在大规模应用或者复杂的 Web 应用上
集成可以嵌入到已存在的 HTML 页面中可以嵌入到已存在的 HTML 页面中,但主要用于基于 Javascript 的项目上
社区小而日益发展市场上最大的
生态系统极为丰富

如何从 jQuery 走向 React:从 jQuery 到现代 Web 开发框架

在 Web 开发的早期阶段,开发者依赖 jQuery 来处理 AJAX 请求、DOM 操作以及事件处理。随着时间的推移,Web 应用发展越来越现代化、结构化,可扩展性要求也越来越高。就在这个时候,AngularReact 和 Vue 等框架和库的出现改变了现状。

React 引入了基于组件的体系结构,这永久性地改变了 Web 开发的方式。其声明式 UI 和单向数据流简化了 Web 开发,可复用性和可维护性更强。这些方面使 React 成为构建动态、响应式和交互式 Web 应用的首选解决方案。

如何从 Web 框架转向 HTMX :从 Web 框架到更现代的 HTML

尽管 ReactVue 和 Angular 等 Web 框架在构建结构化的 Web 应用程序方面表现出色,但是它们的复杂性也给追求简单的开发者带来了巨大的负担。这就是 HTMX 的表现的舞台了!

HTMX 是一个轻量级的解决方案,它保有类似 React 的现代交互性,同时具备像 jQuery 那样的简单集成和无负担特性。它通过扩展 HTML 的自定义属性,使我们能够发起 AJAX 请求而无需编写 JavaScript 代码。HTMX 的理念是让事情变得简单,让开发者能在不丢弃熟悉的 HTML 的情况下,更深入多体验 Web 的魔力。

HTMX 作为一种流线型和灵活的选择,在由更复杂的前端框架主导的宇宙中,独树一帜。

HTMX:一种全新的、现代的交互方法

HTMX 是一个轻量级的、无依赖的、可扩展的 JavaScript 前端库,它可以直接从 HTML 中访问到现代浏览器的特性。具体来说,它允许你在 HTML 代码中直接处理 AJAX 请求、CSS 动画、WebSockets 和服务端发送的事件。

图片

通过设置特殊的 HTML 属性,这个库使你能够访问到以上大部分特性,而无需编写一行 JavaScript 代码。HTMX 提升了 HTML 的能力,使其变成了一个全功能的超文本。

我们接下来通过一些 HTMX 的示例,来看看这个库都提供了什么。

AJAX 请求触发器

HTMX 的主要概念是能够直接从 HTML 发送 AJAX 请求。这得益于以下属性:

  • hx-get: 向给定的 URL 发出一个 GET 请求。

  • hx-post: 向给定的 URL 发出一个 POST 请求。

  • hx-put: 向给定的 URL 发出一个 PUT 请求。

  • hx-patch: 向给定的 URL 发出一个 PATCH 请求。

  • hx-delete: 向给定的 URL 发出一个 DELETE 请求。

当带有这些 HTMX 属性中的一个的 HTML 元素被触发,将会向给定的URL发出指定类型的 AJAX 请求。默认情况下,元素会被 “自然” 事件触发(例如,<input><textarea>, 和 <select> 由 change 事件触发, <form> 由 submit 事件触发,其他情况由 click 事件触发)。你可以通过 hx-trigger 属性定制这种行为。

比如下面的 HTMX 示例:

<div hx-get="/users">
    你好 code秘密花园
</div>

这会告诉浏览器:

“当用户点击 <div> 时,向 /users 发送一个 GET 请求并将响应呈现到 <div> 中”

要使此机制发挥作用,/users 接口应返回原始的 HTML

查询参数和请求体数据

HTMX 设置查询参数和请求体数据的方式取决于 HTTP 请求的类型:

GET 请求:默认情况下,hx-get 不会自动在 AJAX 请求中包含任何查询参数。要设置查询参数,可以在传递给 hx-get 的 URL 中指定它们。或者也可以通过 hx-params 属性来覆盖 HTMX 的默认行为。

  <div hx-get="/example" hx-params="*">你好 code秘密花园</div>

非 GET 请求:当元素是 <form>时,AJAX 请求的请求体会包含它所有输入的值,使用它们的 name 属性作为参数名称。当元素不是 <form> 时,请求体将包含距离最近的 <form> 中所有输入的值。或者,如果元素有 value 属性,那么也会被添加到 Request Body 中。如果要将其他元素的值添加到请求体中,可以使用 hx-include 属性,然后通过 CSS 选择器选择出你想要在请求体中包含的所有元素的值。

<div>
    <button hx-post="/register" hx-include="[name='email']">
        注册!
    </button>
    输入 email: <input name="email" type="email"/>
</div>

然后可以使用 hx-params 属性来过滤掉一些请求体参数。也可以编写自定义的 htmx:configRequest 事件处理器,以编程方式修改请求体定义逻辑。

document.body.addEventListener('htmx:configRequest', function(evt) {
    evt.detail.parameters['auth_token'] = getAuthToken(); // add a new parameter into the mix
});

AJAX 结果处理

如前所述,HTMX 会将触发 AJAX 请求的元素的内部 HTML 替换为服务器返回的 HTML 内容。你可以使用 hx-swap 和 hx-target 属性来定制这种行为:

hx-swap 定义了如何处理服务器返回的 HTML,接受以下自解释的值之一:innerHTML(默认)、outerHTMLbeforebeginafterbeginbeforeendafterenddeletenone

hx-target 接受一个 CSS 选择器,并指示 HTMX 将交换逻辑应用于选定的元素。

我们看下面的示例:

<button 
  hx-post="/tasks"
  hx-swap=".todo-list" 
  hx-target="afterend"
>
  添加任务
</button>

这会告诉浏览器:

“当用户单击 <button> 节点时,向 /tasks 端点发送 POST 请求,并将服务器返回的 HTML 附加到 .todo-list 元素”

以上几个例子是 HTMX 的核心工作理念了 ...

HTMX 与 React 对比

前面我们已经知道了什么是 HTMX 以及它是大概是怎么工作的,下面我们让它与 React 大概做个比较。

语法

HTMX:它扩展了 HTML,提供了直接在 HTML 中与服务器交互的能力,它优先考虑简介性和可读性:

<div hx-get="/hello-world">
    你好 code秘密花园
</div>

React:一个功能齐全的 JavaScript 库,用基于 JSX 编写的可复用组件构建用户界面:

import React, { useState } from "react"

export default const HelloWorldComponent = () => {
  const [responseData, setResponseData] = useState(null)

  const handleClick = () => {
    fetch("/hello-world")
      .then(response => response.text())
      .then(data => {
        setResponseData(data)
      })
  }

  return (
    <div onClick={handleClick}>
      {responseData ? <>{responseData}</> : "你好 code秘密花园"}
    </div>
  )
}

学习曲线

HTMX:因为它基于 HTML 的语法和方法,所以学习曲线是很平滑的。已经熟悉传统 Web 开发的开发者可以在几天内快速掌握它,而新手可以从零开始使用它。

React:由于其独特的 Web 开发方法,React 的学习曲线比较陡峭。在构建你的第一个 React 应用程序之前,你需要理解 SPA(单页应用)、虚拟 DOM、JSX、状态管理、props、重新渲染等概念。这可能让一些初学者感到困难。

功能特性

HTMX:背后的核心概念可以概括为:实现在 HTML 中进行 AJAX 调用,无需 JavaScript 代码。虽然还有其他一些酷炫的特性可以提及,但这基本上就是 HTMX 所能提供的核心功能了。

React:让 React 如此受欢迎的一些特性包括:可复用的组件化架构、便于 UI 开发的 JSX 语法、强大的状态管理、Hooks、同时支持客户端和服务端渲染、高效的虚拟 DOM、CSS-in-JS 支持等。

性能

HTMX:由于其轻量级、无依赖的特性,依赖于 HTMX 的网页通常具有快速的首屏渲染性能。总的来说,对于具有简单交互的应用,HTMX 性能表现良好。

React:用 React 构建的 SPA 应用通常包含大量的 JavaScript。这就导致了更高的网络利用率和客户端渲染时间。但是,虚拟 DOM 和高效的 DIFF 算法使 React 能够高效更新 UI,使其适用于大规模的应用。

集成

HTMX:可以嵌入到任何 HTML 网页中,与那些可以返回原始 HTML 内容的后端技术可以非常丝滑的集成,比如 Node.js、Django、Laravel、Spring Boot、Flask 等等。

React:作为一个前端库,而不是框架,理论上可以将它集成到任何现有的站点中。但是,集成 React 可能需要额外的配置,特别是在并非围绕 JavaScript 构建的前端项目中。

需要注意的是,HTMX 和 React 可以在同一个项目中共存。这意味着你可以在一个网页上同时使用 React 和 HTMX,它们在页面的不同部分起作用,甚至 React 组件也可以依赖 HTMX 属性。

社区

HTMX:由于它在 2020 年底才首次发布,所以 HTMX 肯定不会像 React 那样受欢迎。所以,教程、操作视频并不会很多。尽管如此,该项目已经在 GitHub 上获得了超过 29k 的 star,各方面的讨论也非常热烈。

React:凭借全球数百万开发者以及 GitHub 上超过 218k 的 star,React 无疑是 Web 开发库中的绝对霸主。据 Statista 的调查,React 是目前使用最广泛的前端 Web 库,市场份额超过 40%。难怪会有数以十万计的 React 的教程、文章和视频。

生态系统

HTMX:虽然该库是可扩展的,但项目相对较新, HTMX 的库和工具并不多。在撰写本文时,npm 上的 htmx 标签只有 35 个包。

React:单单 npm 上的 react 标签就有超过 6000 个库。这只是一个 React 相关的标签,你还可以找到与它兼容的数以万计的其他库。

HTMX 和 React,你应该选择哪一个?

当我们比较两种技术时,一般情况下是没有绝对的赢家的。HTMX 和 React 都是优秀的前端 Web 开发库,选择哪一个取决于大家的项目需求和目标。

如果你需要创建一个具备状态管理、提供复杂功能并需要可复用组件的 Web 应用程序时,React可能是更合适的选择。而在构建具有简单交互性和没有特别高级功能的站点时,HTMX 可能是一个更好的解决方案。

HTMX:优点和缺点

👍 优点:

  • 简单直观的基于 HTML 的语法。

  • 只需几个 HTML 属性就能发送 AJAX 请求和更新 DOM。

  • 不需要 JavaScript,直接在 HTML 中实现动态交互。

  • 整合到现有的 HTML 网页中非常简单。

  • 轻量级库,仅有几 KB。

👎 缺点:

  • 需要后端 UI 服务返回原始 HTML,因此更依赖于前端。

  • 相对较新。

React:优点和缺点

👍 优点:

  • 用 JSX 编写可复用组件进行 UI 构建。

  • 复杂的状态管理和支持许多其他有用的功能。

  • 是全球最常用的前端 Web 库。

  • 由 Meta 开发和维护。

  • 对后端没有特定的选择。

👎 缺点:

  • 学习曲线陡峭。

  • 难以整合到非 JavaScript 项目中。

最后

所以,没有谁最好,只有谁最合适。

大家认为这两个库怎么样呢?欢迎在评论区留言。

参考:

  • https://htmx.org/

  • https://semaphoreci.com/blog/htmx-react

  • https://risingstars.js.org/2023/en#section-framework

  • https://react.dev/learn/writing-markup-with-jsx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: React和Vue都是非常受欢迎的JavaScript前端框架,都有其优点和适用场景,以下是它们的一些比较: React: 1. 好的性能: React的虚拟DOM可以显著提高性能,它只会新需要新的部分,而不是整个DOM。 2. 灵活:React并不是一个完整的框架,而是一个库,因此它可以很好地与其他库和框架一起使用。 3. 广泛的使用:由于React的流行程度,它拥有多的社区支持和多的资源。 Vue: 1. 容易学习:Vue的文档非常清晰易懂,因此入门门槛相对较低。 2. 容易上手:Vue的模板语法加直观,也类似于传统的HTML和CSS。 3. 高的可维护性:Vue的模块化开发方式和单文件组件可以好地组织代码,使得应用容易维护。 总之,React和Vue都是非常优秀的前端框架,选择哪个框架最终取决于你的需求和个人偏好。如果你注重性能和灵活性,那么React可能适合你;如果你注重易学易用和可维护性,那么Vue可能适合你。 ### 回答2: React和Vue是目前最为流行的两个前端框架。哪个好,这个问题没有绝对的答案,因为两者有不同的特点和适用场景。 React是由Facebook开发并维护的一个JavaScript库,它采用了组件化的思想,将页面拆分成多个可复用的组件,使开发和维护变得加简单。React还具有强大的生态系统,有大量的第三方库和工具可以使用。此外,React还有许多优秀的社区和文档资源可以参考,学习成本较低。 Vue是由华人开发者尤雨溪创建的一个JavaScript框架,它同样采用了组件化的思想,并且有着简洁、直观的API设计。Vue的语法易于理解和上手,开发效率较高。Vue还有一套完整的生态系统,包括路由、状态管理等功能。Vue也有相对活跃的社区和文档资源。 所以,选择React还是Vue,取决于具体的项目需求和个人喜好。如果你有丰富的JavaScript和前端开发经验,并且喜欢灵活的框架,可以选择React。如果你是一个新手或有限的时间去学习框架,并且希望使用直观、易上手的框架,可以选择Vue。 总的来说,React和Vue都是优秀的前端框架,各有其特点和优势,最适合的框架取决于具体的项目需求和个人技术栈。 ### 回答3: 这是一个主观的问题,没有绝对的答案。React和Vue是两个非常受欢迎的前端框架,都有自己的优势和适用场景。 React是由Facebook开发的,是一个灵活且功能强大的框架。它采用组件化的开发方式,可以将页面拆分成独立的组件,易于维护和复用。React还拥有强大的生态系统,有丰富的第三方库和工具支持,可以满足复杂应用的需求。另外,React还有很多官方文档和社区支持,学习和使用起来相对比较容易。因此,对于大型项目和有复杂逻辑的应用来说,React可能适合。 Vue是由尤雨溪开发的,是一个轻量级的框架。Vue采用了声明式的语法和基于组件的开发方式,使得开发者可以轻松地编写可读性强的代码。Vue的主要特点是易学易用,对初学者十分友好。Vue还有非常丰富的官方文档和社区资源,为开发者提供了很好的学习和交流平台。对于快速原型和小型项目来说,Vue可能适合。 综上所述,React和Vue各有优势,选择哪个好取决于具体的项目需求和团队技术背景。在实际开发中,可以根据项目大小、团队技术水平、可维护性和生态系统等因素来选择合适的框架。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值