成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Vue 推出了新特性 useId,能提高多少開發體驗?

開發 前端
大家都知道,在?Vue?中使用?v-for?去循環遍歷一個列表的時候,需要給每一個遍歷項加上一個唯一?key?,確保 DOM 更新的時候能得到一定的性能提升,我們可以使用?useID?來生成一個唯一?key。

在 Vue3.5 這個版本中,新增了 useId 這一個 API,它的功能是用來生成一個 唯一的ID,為什么說它生成的 ID 是唯一的呢?我們可以來看看 useID 的源碼,你就知道了。

其實原理很簡單,就是調用 getCurrentInstance 這個,這個 API 會返回當前 Vue 實例的信息對象,而這個信息對象身上有一個 ids 的數組,而 useId 就是根據這個數組去生成唯一 ID 的。

圖片圖片

  • appContext.config.idPrefix: 這是可全局配置的 ID 前綴,如果你不配置,那就默認是 v。
  • ids[0] + ids[1]++: 由唯一的 ids[0] 和遞增的 ids[1] 來實現同實例內與不同實例時間的唯一性。

想要設置 appContext.config.idPrefix 可以在 main.ts 中去設置。

圖片圖片

接下來講一下 useId 都有哪些比較實用且常用的場景吧!

表單對應標識

表單中,我們會使用 label 來做表單項的展示文本,我們想要點擊這個展示文本,能自動聚焦到表單項上,那么我們可以同時給 label、表單項標簽 設置上一個一樣的 ID。

圖片圖片

圖片圖片

v-for 唯一 key

大家都知道,在 Vue 中使用 v-for 去循環遍歷一個列表的時候,需要給每一個遍歷項加上一個唯一 key ,確保 DOM 更新的時候能得到一定的性能提升,我們可以使用 useID 來生成一個唯一 key。

圖片圖片

圖片圖片

服務端渲染保持唯一性

使用 服務端渲染(SSR) 的應用里,頁面的 HTML 是由服務器生成的,隨后被傳送到客戶端的瀏覽器。當瀏覽器接收到這些 HTML 內容后,會將其轉變為一個可交互的頁面。然而,倘若服務器端與客戶端生成的 HTML 中具有相同的 ID,在客戶端進行 激活(hydrate) 操作時,就有可能出現問題。因為客戶端可能會試圖對一個已經被服務器端渲染好的 DOM元 素進行操作,這樣就會引發潛在的沖突或者錯誤。

可以通過一個小例子來說明這個問題。

服務端代碼

圖片圖片

客戶端代碼

圖片圖片

在這個案例中,無論是服務端還是客戶端,我們都使用了 createSSRApp(App) 來創建應用實例。如果我們在 App.vue 中使用了 useId 來生成 ID,那么這些 ID 將在服務端渲染時生成一次,并在客戶端激活時再次使用相同的 ID。

App.vue

圖片圖片

在 App.vue 組件里,我們借助 useId為 <input> 元素創建了一個獨一無二的 ID。此 ID 在服務端渲染階段生成,并被納入發送至客戶端的HTML之中。當客戶端接收到該HTML并展開激活流程時,鑒于useId所生成的ID在服務端和客戶端保持一致,客戶端便能準確地把 <label> 元素與 <input> 元素相關聯,從而避免出現 ID 沖突的情況。

倘若不使用 useId,而是采用 Math.random() 或者 Date.now() 來生成 ID,那么服務端和客戶端有可能生成不一樣的ID。這就會致使客戶端在激活時無法正確地將 <label> 與 <input> 關聯起來,因為二者的 ID 存在差異。這種情況或許會致使表單元素出現行為異常,比如點擊 <label> 時,<input> 卻不能獲取焦點。

組件庫中 ID 的生成

在運用 Element Plus 等組件庫開展 SSR 開發的過程中,為防止出現 hydration 錯誤,務必要保證服務器端和客戶端所生成的 ID 是一致的。向 Vue 中注入 ID_injection_key 這一操作,能夠確保 Element Plus 所生成的 ID 在 SSR 里具備唯一性。

圖片圖片

責任編輯:武曉燕 來源: 前端之神
相關推薦

2022-05-02 14:53:59

Plasma桌面環境KD

2017-03-08 07:52:24

科技新聞早報

2009-05-20 10:21:43

亞馬遜AmazonEC2

2011-09-28 13:39:44

Ubuntu

2021-08-04 05:24:59

Windows 操作系統微軟

2012-08-24 09:23:00

Windows Log

2013-10-28 14:05:05

StartOSStartOS 6.0

2025-05-15 08:10:00

Vue 3.5Vue

2025-02-11 08:00:00

閉包JavaScript開發

2024-12-20 16:31:34

2020-11-04 11:05:38

JavaScript新特性前端

2011-09-30 09:47:15

GNOME 3.2

2017-07-05 08:40:50

MongoDBStitch后端

2009-01-05 18:15:48

服務器虛擬化數據中心

2021-03-06 07:36:21

小愛同學Windows10應用

2010-09-01 21:20:28

跳線布線西蒙

2017-03-29 20:30:03

2021-10-14 09:43:59

人工智能AI機器人

2025-01-07 13:48:57

2012-08-28 09:54:35

SilverlightRapidSLSilverlight
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 做a视频在线观看 | 欧美一区二区久久 | 99国内精品久久久久久久 | 国产精品毛片一区二区三区 | 91九色视频 | 国产精品高潮呻吟久久 | 欧美中文字幕在线 | 久久精品亚洲精品 | 久久国产精品视频 | 亚洲精彩视频 | 欧美成人精品一区二区男人看 | 日韩精品一区二区三区在线播放 | 精品一区二区三区在线观看国产 | 久在线| 高清亚洲| 中文日韩在线 | 免费观看a级毛片在线播放 黄网站免费入口 | 日韩精品一区二区三区视频播放 | 99在线资源 | 亚洲一区二区av在线 | 日韩毛片免费看 | 精品久久国产 | 欧美二区在线 | 波多野结衣电影一区 | 精品久久久久一区 | 亚洲人成在线观看 | 亚洲精品国产第一综合99久久 | 91精品国产色综合久久 | 久草院线 | 国产免费一区二区三区网站免费 | 亚洲成人精品久久久 | 国产三级一区二区三区 | 欧美精品综合在线 | 两性午夜视频 | 龙珠z在线观看 | 日韩欧美手机在线 | 在线一区视频 | 福利片在线看 | 久久国产视频网 | 日本黄色大片免费 | 日日夜夜免费精品视频 |