博客 / 詳情

返回

HTMLX小書

1 介紹:HTMLX和現代Web開發

本書涵蓋:

  • HTMLX的工作原理和使用場景
  • 實例和範式
  • 集成後端技術

從一個空的index.html文件開始,拷貝代碼示例。不炒作只專注技術本身!

1.1 HTMLX與其他庫對比

HTMLX與前端其他工具的不同:

  • React/Vue/Angular:HTMX強調對HTML直接增強,比但應用框架更少以來JavaScript代碼
  • Alpine.js: 雖然Alpine.js直接處理客户端交互,但HTMX專注於服務器端通信和DOM更新
  • 原生JavaScript: HTMX消除了AJAX請求和DOM操作代碼

2 開始使用HTMX

本章介紹了HTMX的基礎知識。它涵蓋了項目中設置HTMX及創建HTMX元素。本章結束時,你將擁有一個功能完善的HTMX配置,並且瞭解其基本實現。

2.1 設置

利用CDN將HTMX添加到你項目中

<script src="https://unpkg.com/htmx.org@2.0.4"></script>

或者通過npm安裝:

npm install htmx.org

2.2 你的第一個HTMX元素

現在我們已經將HTMX集成到項目中,讓我們創建第一個HTMX元素。我們將從一個簡單的按鈕開始,當點擊時加載一些內容。

這是我們的HTML代碼:

<!DOCTYPE html>
<html>
<head>
    <script src="https://unpkg.com/htmx.org@2.0.4"></script>
</head>
<body>
    <button hx-get="/api/hello" hx-target="#message">
        Say Hello
    </button>
    <div id="message"></div>
</body>
</html>

讓我們來分析下代碼:

  • 我們這裏有個按鈕元素,帶有兩個HTMX屬性:hx-gethx-target
  • hx-get="/api/hello"告訴HTMX當點擊按鈕時,向"/api/hello"URL發起一個GET請求
  • hx-target="#message"制定請求響應內容插入到id為"message"元素中

當你點擊該按鈕時,HTMX將向"/api/hello"發起一個GET請求,並將響應內容放入id為"message"的div中。

在幕後,HTMX為按鈕設置了一個事件監聽器。點擊時,它會發起一個AJAX請求,並將響應內容更新DOM。非常簡單!

2.3 理解HTMX屬性語法

HTMX使用HTML屬性來定義行為,其通用語法為:

hx-{action}="{value}"

我們來看看一些常用屬性:

2.3.1 hx-get:發起GET請求

<button hx-get="/api/data">Load Data</button>

2.3.2 hx-post:發起POST請求

<form hx-post="/api/submit">
    <input name="email" type="email">
    <button type="submit">Subscribe</button>
</form>

2.3.3 hx-trigger:指定觸發請求的時間

<div hx-get="/api/time" hx-trigger="every 60s">
    <!-- 該內容將每60秒更新 -->
</div>

2.3.4 hx-target:指定響應放置的位置

<button hx-get="/api/data" hx-target="#message-box">
    Load Message
</button>
<div id="message-box">This is the message box</div>

2.3.5 hx-swap:定義響應應如何替換

<button hx-get="/api/data" hx-target="#data-container" hx-swap="outerHTML">
    Replace Container
</button>
<div id="data-container">Old content</div>

2.3.6 hx-vals: 為請求添加額外值

<button hx-post="/api/echo" 
        hx-vals='{"product_id": 1234, "category": "shoes"}'>
    Update Product Category
</button>

這些屬性讓你能夠從HTML代碼中對你的Web應用行為進行強大的控制。

HTMX屬性提供以下功能:

  • 發起各種類型的 HTTP 請求(GET、POST、PUT、PATCH、DELETE)
  • 定位需要更新的元素
  • 控制內容交換方式
  • 處理表單提交
  • 添加自定義頭部和參數
  • 管理指示器和加載狀態
  • 與服務器發送事件和 WebSocket 交互
  • 更多……

讓我們通過一個小項目將所有內容整合起來:一個簡單的動態內容加載器。

這個例子演示:

1、使用hx-get發起GET請求
2、使用hx-target指定響應應插入的位置
3、使用hx-trigger來定義何時發起請求
4、使用hx-indicator來顯示加載狀態

在服務器端(使用Python),你可能有:

from random import choice

from flask import Flask, render_template

QUOTES = [
    "The only way to do great work is to love what you do. - Steve Jobs",
    "Innovation distinguishes between a leader and a follower. - Steve Jobs",
    "Stay hungry, stay foolish. - Steve Jobs",
]
app = Flask(__name__)


@app.get("/")
def index():
    return render_template("index.html")


@app.get("/api/quote")
def quote():
    random_quote = choice(QUOTES)
    return f"<blockquote>{random_quote}</blockquote>"

該請求將隨機獲取一條引言發送回客户端,本示例展示了使用HTMX進行簡單動態內容加載的場景。

3 HTMX核心概念

在本章中,我們將深入探討更多核心概念。

3.1 觸發器:讓事情發生

在HTMX中,觸發器是啓動動作的元素。它們定義了何時發起HTMX請求。默認情況下,觸發器取決於元素:

  • 對於表單,使用的是提交事件
  • 對於輸入框、選擇框和文本域,使用的變更事件
  • 對於其他所有情況,使用的是點擊事件

不過HTMX允許你通過hx-trigger屬性來改變這一行為,我們看看示例:

<!-- Trigger on click (default for buttons) -->
<button hx-get="/api/data">
  Load Data
</button>

<!-- Trigger on form submission (default for forms) -->
<form hx-post="/api/submit">
  <input name="email" type="email">
  <button type="submit">Subscribe</button>
</form>

<!-- Custom trigger: every 10 seconds -->
<div hx-get="/api/time" hx-trigger="every 10s">
  <!-- Content will update every 10 seconds -->
</div>

<!-- Multiple triggers -->
<div hx-get="/api/data" hx-trigger="load, every 30s">
  <!-- Content loads immediately and refreshes every 30 seconds -->
</div>
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.