日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

前端工作方式要換了?HTMX簡介:無需JavaScript的動態HTML

來源: 責編: 時間:2023-10-19 09:27:51 274觀看
導讀HTMX允許你使用擴展的HTML語法代替 JavaScript 來實現交互性。HTMX 在標記中直接為你提供HTTP 交互,并支持許多其他交互需求,無需求助于 JavaScript。這是一個有趣的想法,可能最終會影響到web前端的工作方式。讓我們看看

jB728資訊網——每日最新資訊28at.com

HTMX允許你使用擴展的HTML語法代替 JavaScript 來實現交互性。HTMX 在標記中直接為你提供HTTP 交互,并支持許多其他交互需求,無需求助于 JavaScript。這是一個有趣的想法,可能最終會影響到web前端的工作方式。讓我們看看如何使用HTMX以及它的吸引力。jB728資訊網——每日最新資訊28at.com

什么是HTMX?

HTMX已經存在了一段時間,但它一直是一個不太為人知的項目。它最近被接受到 GitHub Accelerato r中可能會改變這一切。基本的想法是取代那些需要模板化的 JavaScript 和 HTML 交互的常見用例,僅使用HTML語法,而不是 JavaScript。許多交互與HTMX一起變得聲明式。jB728資訊網——每日最新資訊28at.com

這聽起來很有前景,不是嗎?每個web開發者都知道有很多常見的模板化用例。HTMX的創建者Carson Gross表示,他希望“完善HTML作為超文本,增加其表現力,使其成為更先進、現代web應用程序的有力競爭者。”jB728資訊網——每日最新資訊28at.com

為了快速了解,看看這個HTMX演示。基本上,我們點擊一個按鈕來啟用對用戶對象的字段進行編輯。數據實際上是PUT到一個后端端點。你可以在圖1中看到演示 —— 在你點擊“顯示”后注意底部框架中的網絡交互。jB728資訊網——每日最新資訊28at.com

jB728資訊網——每日最新資訊28at.com

通常,無論你使用什么框架,這都需要某種形式的JavaScriptHTMX 將交互轉變為兩塊標記:一個用于顯示UI,一個用于編輯UI,如Listing 1所示。jB728資訊網——每日最新資訊28at.com

Listing 1. HTMX中的用戶更新

<div hx-target="this" hx-swap="outerHTML">    <div><label>First Name</label>: Joe</div>    <div><label>Last Name</label>: Blow</div>    <div><label>Email</label>: joe@blow.com</div>    <button hx-get="/contact/1/edit" class="btn btn-primary">    點擊編輯    </button></div><!-- 編輯: --><form hx-put="/contact/1" hx-target="this" hx-swap="outerHTML">  <div>    <label>First Name</label>    <input type="text" name="firstName" value="Joe">  </div>  <div class="form-group">    <label>Last Name</label>    <input type="text" name="lastName" value="Blow">  </div>  <div class="form-group">    <label>Email Address</label>    <input type="email" name="email" value="joe@blow.com">  </div>  <button class="btn">提交</button>  <button class="btn" hx-get="/contact/1">取消</button></form>

如果你看Listing 1中的標記,很容易看出發生了什么:hx-swap屬性為編輯前的 div 提供HTML,outerHTML告訴框架它如何與內部的動態內容相關。可編輯版本作為一個表單元素到達,其中包含x-put屬性,該屬性標識PUT HTML方法和要使用的端點。jB728資訊網——每日最新資訊28at.com

問題變成,HTMX如何實現這種“交換”和后續的PUT,而不做任何JavaScript呢?答案很簡單:它使用服務器端渲染的HTML作為編輯標記,并將表單封裝抽象到框架中。JavaScript 仍然在幕后工作。實際上,我們得到了一個更細粒度的 HTML 語法,它只能加載片段而不是整個頁面,并且可以提交Ajax請求。jB728資訊網——每日最新資訊28at.com

這是DRY原則在行動中的一個有趣的例子。即使使用像React這樣的東西,從一個表單到另一個表單也有一定數量的模板代碼。當然,HTMX并沒有完全消除這一點,但它已經將工作轉移到了服務器上。jB728資訊網——每日最新資訊28at.com

HTMX的服務器端

現在,讓我們考慮等式的服務器端。有許多使用HTMX的服務器端技術的例子,因為,正如Gross所說,HTMX是“后端不可知的。它不關心你使用什么后端,只要它產生HTML。” 為了了解它是如何工作的,讓我們看一個使用Express和Pug HTML模板引擎的TODO示例。這個例子是經典TODO應用程序的實現。jB728資訊網——每日最新資訊28at.com

首先,現有的待辦事項從Express輸出,命令如下:jB728資訊網——每日最新資訊28at.com

res.render('index', { todos: filteredTodos, filter, itemsLeft: getItemsLeft() });

此命令使用內存中的待辦事項集合,并使用一個Pug模板渲染它們,該模板是典型的格式,但它包括驅動HTMX交互的特殊hx-屬性。例如,用于POST新待辦事項的表單顯示在Listing 2中。jB728資訊網——每日最新資訊28at.com

Listing 2. 具有HTMX屬性的表單POST

form(hx-post="/todos", hx-target="#todo-list", hx-swap="afterbegin", _="on htmx:afterOnLoad set #txtTodo.value to ''")  input#txtTodo.new-todo(name="todo",placeholder='需要做什么?', autofocus='')

你可以在這里看到 afterbegin 屬性如何工作,將新內容放在列表中的正確位置。on htmx腳本是 Hyperscript 的一個例子,這是一種簡化的腳本語言。它經常與HTMX一起使用,但并不嚴格屬于HTMX或需要使用它。實際上,on htmx在這里用于處理在創建新的待辦事項后設置輸入表單的值。jB728資訊網——每日最新資訊28at.com

作為另一個例子,Listing 3顯示了待辦事項編輯的Pug模板。jB728資訊網——每日最新資訊28at.com

Listing 3. 在PUG中編輯服務器端模板

form(hx-post="/todos/update/" + todo.id)  input.edit(type="text", name="name",value=todo.name)

在Listing 3中,標記使用hx-post屬性來指示發送已編輯待辦事項的JSON的位置。從這些例子中得到的結論是我之前提到的:服務器負責提供HTML(帶有HTMX標簽)的適當大小的塊,以填充前端為其各種交互所需的屏幕的不同部分。HTMX客戶端將根據屬性將它們放在它們應該在的位置,并處理發送由服務消費的適當數據。jB728資訊網——每日最新資訊28at.com

負責接收數據的端點可以像典型的端點一樣操作,區別在于響應應該是必要的HTMX。例如,在Listing 4中,你可以看到Express服務器如何處理POST以創建新的待辦事項。jB728資訊網——每日最新資訊28at.com

Listing 4. 處理待辦事項創建

app.post('/todos', (req, res) => {  const { todo } = req.body;  const newTodo = {     id: uuid(),    name: todo,     done: false   };  todos.push(newTodo);  let template = pug.compileFile('views/includes/todo-item.pug');  let markup = template({ todo: newTodo});  template = pug.compileFile('views/includes/item-count.pug');  markup  += template({ itemsLeft: getItemsLeft()});  res.send(markup);});

Listing 4 是一個典型的POST body處理器,它從表單數據中取出值并使用它創建一個新的業務對象(newTodo)。然后,它使用這些值填充Pug模板并將其發送回客戶端,用作前端的Todo列表中的插入。jB728資訊網——每日最新資訊28at.com

其他服務器端技術的例子包括使用HTMX與Java世界中的Spring Boot和Thymeleaf以及Python世界中的Spring Boot和Django。jB728資訊網——每日最新資訊28at.com

使用HTMX的客戶端模板

HTMX支持的這種模式的一個變種是使用客戶端模板。這是一個在客戶端運行的層,接受來自服務器的JSON,并在那里進行標記轉換。當我問Gross關于使用帶有 JSON的 RESTful 服務時,他指出這是可能的,但前提是REST通常被誤解。jB728資訊網——每日最新資訊28at.com

一個相反的問題是,我們如何向服務器提交JSON,而不是默認的表單編碼?再次,有一個擴展可以做到這一點;即,JSON-ENC。jB728資訊網——每日最新資訊28at.com

結論

考慮HTMX會導致一堆想法同時到來。結論是這個概念和這個項目本身一樣有益。作為一個成熟的項目的HTMX可能最終不會像今天這樣工作,但它已經證明是一個有益的影響。最吸引人的是處理所有這些非常常見的Ajax風格的請求的想法,這通常意味著使用fetch()或類似的東西,只用一個HTML屬性。這只是更簡單、更干凈,并且將一切都保持在一個地方。很明顯標記做了什么。jB728資訊網——每日最新資訊28at.com

我對服務器端標記生成持更加矛盾的態度。開發者習慣于為此目的處理JSON;引入標記只是在客戶端創建中增加了一個步驟。我們已經看到了許多服務器端方法,它們總是似乎模糊了HTML、JavaScript和CSS的強大組合,這三者最終總是勝出。也許這次會不同。這是一個大的擺動。jB728資訊網——每日最新資訊28at.com

當然,還有客戶端模板選項,它使服務器成為一個熟悉的JSON發射器。我試圖想象它在一個大型軟件項目中是如何工作的。它會減少大規模項目中的總體復雜性嗎?jB728資訊網——每日最新資訊28at.com

Gross對復雜性有自己的想法。你可以看到他的想法在HTMX的設計中得到體現。這項技術希望通過將我們帶回到Hypertext作為web應用程序的狀態機制來簡化事情。這個例子顯示了這個想法的運作。使用JSON作為協議意味著使客戶端更加智能、更加復雜,并使架構變得不那么自描述。jB728資訊網——每日最新資訊28at.com

也許它都可以工作。如果我們避免了固有的復雜性,擴展了底層語言HTML,實際上處理現代需求,比如Ajax,我們可以回到一個更簡單的時代。標記將再次成為中心數據描述符,并足以描述UI以及線上的數據。jB728資訊網——每日最新資訊28at.com

jB728資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-14118-0.html前端工作方式要換了?HTMX簡介:無需JavaScript的動態HTML

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 壓測工具界的 “悍馬” :wrk 使用

下一篇: Find、Take、First和Last函數的區別

標簽:
  • 熱門焦點
  • 0糖0卡0脂 旭日森林仙草烏龍茶優惠:15瓶到手29元

    旭日森林無糖仙草烏龍茶510ml*15瓶平時要賣為79.9元,今日下單領取50元優惠券,到手價為29.9元。產品規格:0糖0卡0脂,添加草本仙草汁,清涼爽口,富含茶多酚,保留
  • JavaScript 混淆及反混淆代碼工具

    介紹在我們開始學習反混淆之前,我們首先要了解一下代碼混淆。如果不了解代碼是如何混淆的,我們可能無法成功對代碼進行反混淆,尤其是使用自定義混淆器對其進行混淆時。什么是混
  • Raft算法:保障分布式系統共識的穩健之道

    1. 什么是Raft算法?Raft 是英文”Reliable、Replicated、Redundant、And Fault-Tolerant”(“可靠、可復制、可冗余、可容錯”)的首字母縮寫。Raft算法是一種用于在分布式系統
  • 掘力計劃第 20 期:Flutter 混合開發的混亂之治

    在掘力計劃系列活動第20場,《Flutter 開發實戰詳解》作者,掘金優秀作者,Github GSY 系列目負責人戀貓的小郭分享了Flutter 混合開發的混亂之治。Flutter 基于自研的 Skia 引擎
  • CSS單標簽實現轉轉logo

    轉轉品牌升級后更新了全新的Logo,今天我們用純CSS來實現轉轉的新Logo,為了有一定的挑戰性,這里我們只使用一個標簽實現,將最大化的使用CSS能力完成Logo的繪制與動畫效果。新logo
  • 使用AIGC工具提升安全工作效率

    在日常工作中,安全人員可能會涉及各種各樣的安全任務,包括但不限于:開發某些安全工具的插件,滿足自己特定的安全需求;自定義github搜索工具,快速查找所需的安全資料、漏洞poc、exp
  • 本地生活這塊肥肉,拼多多也想吃一口

    出品/壹覽商業 作者/李彥編輯/木魚拼多多也看上本地生活這塊蛋糕了。近期,拼多多在App首頁&ldquo;充值中心&rdquo;入口上線了本機生活界面。壹覽商業發現,該界面目前主要
  • 年輕人的“職場羞恥感”,無處不在

    作者:馮曉亭 陶 淘 李 欣 張 琳 馬舒葉來源:燃次元&ldquo;人在職場,應該選擇什么樣的著裝?&rdquo;近日,在網絡上,一個與著裝相關的帖子引發關注,在該帖子里,一位在高級寫字樓亞洲金
  • 北京:科技教育體驗基地開始登記

      北京“科技館之城”科技教育體驗基地登記和認證工作日前啟動。首批北京科技教育體驗基地擬于2023年全國科普日期間掛牌,后續還將開展常態化登記。  北京科技教育體驗基
Top 主站蜘蛛池模板: 云和县| 德安县| 巴彦县| 改则县| 德安县| 康保县| 荃湾区| 浙江省| 平武县| 新巴尔虎右旗| 海林市| 永登县| 阿拉善盟| 渭源县| 泰安市| 济南市| 高台县| 伊吾县| 东丽区| 潼关县| 库尔勒市| 丘北县| 比如县| 岢岚县| 达州市| 历史| 福清市| 湛江市| 肃北| 苏尼特左旗| 晋中市| 威远县| 襄汾县| 潞城市| 昌图县| 富源县| 平武县| 遵义市| 丁青县| 时尚| 盐津县|