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

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

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

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

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

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

什么是HTMX?

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

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

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

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

通常,無論你使用什么框架,這都需要某種形式的JavaScriptHTMX 將交互轉變為兩塊標記:一個用于顯示UI,一個用于編輯UI,如Listing 1所示。URV28資訊網——每日最新資訊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方法和要使用的端點。URV28資訊網——每日最新資訊28at.com

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

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

HTMX的服務器端

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

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

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

此命令使用內存中的待辦事項集合,并使用一個Pug模板渲染它們,該模板是典型的格式,但它包括驅動HTMX交互的特殊hx-屬性。例如,用于POST新待辦事項的表單顯示在Listing 2中。URV28資訊網——每日最新資訊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在這里用于處理在創建新的待辦事項后設置輸入表單的值。URV28資訊網——每日最新資訊28at.com

作為另一個例子,Listing 3顯示了待辦事項編輯的Pug模板。URV28資訊網——每日最新資訊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客戶端將根據屬性將它們放在它們應該在的位置,并處理發送由服務消費的適當數據。URV28資訊網——每日最新資訊28at.com

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

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

使用HTMX的客戶端模板

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

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

結論

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

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

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

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

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

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

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

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

上一篇: 實現自定義ClassLoader:擴展Java類加載機制

下一篇: 在Vue中使用Mock.js虛擬接口數據實例詳解

標簽:
  • 熱門焦點
  • Mate60手機殼曝光 致敬自己的經典設計

    8月3日消息,今天下午博主數碼閑聊站帶來了華為Mate60的第三方手機殼圖,可以讓我們在真機發布之前看看這款華為全新旗艦的大致輪廓。從曝光的圖片看,Mate 60背后攝像頭面積依然
  • 三言兩語說透設計模式的藝術-簡單工廠模式

    一、寫在前面工廠模式是最常見的一種創建型設計模式,通常說的工廠模式指的是工廠方法模式,是使用頻率最高的工廠模式。簡單工廠模式又稱為靜態工廠方法模式,不屬于GoF 23種設計
  • 得物效率前端微應用推進過程與思考

    一、背景效率工程隨著業務的發展,組織規模的擴大,越來越多的企業開始意識到協作效率對于企業團隊的重要性,甚至是決定其在某個行業競爭中突圍的關鍵,是企業長久生存的根本。得物
  • 十個簡單但很有用的Python裝飾器

    裝飾器(Decorators)是Python中一種強大而靈活的功能,用于修改或增強函數或類的行為。裝飾器本質上是一個函數,它接受另一個函數或類作為參數,并返回一個新的函數或類。它們通常用
  • 微信語音大揭秘:為什么禁止轉發?

    大家好,我是你們的小米。今天,我要和大家聊一個有趣的話題:為什么微信語音不可以轉發?這是一個我們經常在日常使用中遇到的問題,也是一個讓很多人好奇的問題。讓我們一起來揭開這
  • Temu起訴SHEIN,跨境電商戰事升級

    來源 | 伯虎財經(bohuFN)作者 | 陳平安日前據外媒報道,拼多多旗下跨境電商平臺Temu正對競爭對手SHEIN提起新訴訟,訴狀稱Shein&ldquo;利用市場支配力量強迫服裝廠商與之簽訂獨家
  • 小米MIX Fold 3配置細節曝光:搭載領先版驍龍8 Gen2+罕見5倍長焦

    這段時間以來,包括三星、一加、榮耀等等有不少品牌旗下的最新折疊屏旗艦都得到了不少爆料,而小米新一代折疊屏旗艦——小米MIX Fold 3此前也屢屢被傳
  • 蘋果公司要求三星和LG Display生產「無邊框」OLED iPhone顯示屏

    據 The Elec 報道,蘋果已要求其供應商為未來的 iPhone 型號開發「無邊框」OLED 顯示面板。蘋果顯然已要求三星和 LG Display 開發新的 OLED 顯示面
  • 2299元起!iQOO Pad開啟預售:性能最強天璣平板

    5月23日,iQOO如期舉行了新品發布會,除了首發安卓最強旗艦處理器的iQOO Neo8系列新機外,還在發布會上推出了旗下首款平板電腦——iQOO Pad,其搭載了天璣
Top 主站蜘蛛池模板: 满城县| 莒南县| 台州市| 新丰县| 界首市| 花莲市| 册亨县| 大关县| 鄂托克旗| 浦城县| 高唐县| 新平| 平潭县| 叙永县| 盐边县| 长乐市| 米脂县| 社会| 商水县| 东乡族自治县| 峨眉山市| 无极县| 新化县| 娄底市| 兴安县| 武鸣县| 东兰县| 禹州市| 武乡县| 友谊县| 保德县| 离岛区| 阳春市| 犍为县| 自贡市| 莫力| 海口市| 衡水市| 商南县| 华安县| 新宾|