1.5.Vue v-for 和 指令修飾符

vue v-for

當你使用 v-for 指令來渲染列表時,為每個元素提供一個唯一的 key 屬性是非常重要的。key 是用來給 Vue 一個提示,以便它能夠追蹤每個節點的身份,從而更高效地更新虛擬 DOM。

key?的作用

  1. 唯一標識key 應該是每項數據的唯一標識符,這樣 Vue 可以區分不同的元素。通常可以使用數據項中的唯一 ID 或者數組索引(雖然不推薦)作為 key

  2. 優化更新性能:當數據發生變化時,Vue 使用 key 來識別哪些元素被添加、刪除或重新排序,從而最小化組件的重渲染范圍,提高性能。

  3. 保持組件狀態:如果列表中的元素是動態組件或包含可輸入的表單元素(如 <input>),key 可以幫助保留用戶的輸入狀態。沒有 key,Vue 可能會復用元素,導致意外的狀態丟失。

基本用法

<ul><li v-for="item in items" :key="item.id">{{ item.name }}</li>
</ul>

在這個例子中,假設 items 是一個對象數組,每個對象都有一個唯一的 idname 屬性。:key="item.id" 確保了每個 <li> 元素都有一個唯一的鍵值,這有助于 Vue 更高效地管理這些元素。

注意事項

  1. 避免使用數組索引作為 key:盡管可以使用數組的索引作為 key,但這是不推薦的做法,尤其是在列表順序可能會變化的情況下。因為這樣做會導致 Vue 無法準確地跟蹤元素的身份,進而可能導致不必要的重渲染或其他問題。

    <!-- 不推薦 -->
    <div v-for="(item, index) in items" :key="index">{{ item.name }}
    </div>
  2. 確保 key 的唯一性key 必須是唯一的,這意味著在一個 v-for 循環內部,所有的 key 都應該是獨一無二的。重復的 key 可能會導致不可預知的行為。

狀態錯誤例子:

<!DOCTYPE html>
<html lang="zh-cn"><head><meta charset="UTF-8"><title>Vue 2 Todo App</title><script src="https://cdn.jsdelivr.net/npm/vue@2"></script></head><body><div id="app"><ul><li v-for="(todo, index) in todos" :key="index"><input type="checkbox">{{ todo.text }}<button @click="removeTodo(index)">Remove</button></li></ul><input v-model="newTodoText" placeholder="Add a new todo"><button @click="addTodo">Add Todo</button></div><script>new Vue({el: '#app',data: {todos: [{ text: 'Learn JavaScript' },{ text: 'Learn Vue' },{ text: 'Build something awesome' }],newTodoText: ''},methods: {addTodo() {this.todos.push({ text: this.newTodoText });this.newTodoText = '';},removeTodo(index) {this.todos.splice(index, 1);}}});</script>
</body></html>

?

點擊刪除第一個.對應的效果

?

?

  • 舊的 VNode 列表 (刪除前):

    • key: 0?-> 對應數據?{ id: 1, ... }
    • key: 1?-> 對應數據?{ id: 2, ... }
    • key: 2?-> 對應數據?{ id: 3, ... }
  • 新的 VNode 列表 (刪除后):

    • key: 0?-> 對應數據?{ id: 2, ... }?(注意:索引0現在對應的是原來索引1的數據)
    • key: 1?-> 對應數據?{ id: 3, ... }?(注意:索引1現在對應的是原來索引2的數據)

vue會認為key值相同的是同一個元素,不會進行刪除,而是會用更新的狀態,去改變更改的內容.

也就是key0的節點和key1的節點有對應項.進行了更新

對應到key2的最后一項.新vnove里沒有該項.會刪除最后一項.?導致刪除的不是第一項出現了狀態的丟失

指令修飾符

?

指令修飾符(Modifiers) 是一種特殊后綴,以點符號(.)開頭,用于指出一個指令應當以特殊的方式來綁定。它們可以簡化代碼,并且使意圖更加明確。

下面是一些常用的 Vue 指令及其修飾符的詳細解釋:

1.?v-model?修飾符

  • .lazy: 默認情況下,v-model 在每次 input 事件觸發后將輸入框的值與數據進行同步。使用 .lazy 修飾符則改為在 change 事件之后進行同步。

    <!-- 在“change”時而非“input”時更新 -->
    <input v-model.lazy="message">
  • .number: 自動將用戶的輸入值轉換為數值類型。如果輸入內容不能被轉換為數字,則返回原始的輸入值。

    <input v-model.number="age" type="number">
  • .trim: 自動過濾用戶輸入的首尾空格。

    <input v-model.trim="msg">

2.?v-on?(或?@) 修飾符

  • .stop: 調用 event.stopPropagation() 方法,阻止事件冒泡。

    <div @click="doSomething"><button @click.stop="doSomethingElse">Stop Propagation</button>
    </div>
  • .prevent: 調用 event.preventDefault() 方法,阻止默認行為。

    <form @submit.prevent="onSubmit"></form>
  • .capture: 使用事件捕獲模式添加事件監聽器。

    <div @click.capture="doSomething">Capture!</div>
  • .self: 只當事件是從偵聽器綁定的元素本身觸發時才觸發回調。

    <div @click.self="doSomething">Self Click</div>
  • .once: 點擊事件只會觸發一次。

    <button @click.once="doThis">Only once</button>
  • .passive: 告訴瀏覽器你不想阻止事件的默認行為(主要用于優化滾動性能)。例如,在處理觸摸或滾輪事件時非常有用。

    <div @scroll.passive="onScroll">...</div>

3.常用按鍵修飾符

  1. .enter: 監聽 Enter 鍵。

    <input @keyup.enter="submit">
  2. .tab: 監聽 Tab 鍵。

    <input @keydown.tab="onTab">
  3. .delete: 監聽 Delete 和 Backspace 鍵。

    <input @keydown.delete="onDelete">
  4. .esc: 監聽 Escape 鍵。

    <input @keyup.esc="closeModal">
  5. .space: 監聽 Space 鍵。

    <input @keydown.space="onSpace">
  6. .up: 監聽 Up 鍵。

    <input @keydown.up="onUp">
  7. .down: 監聽 Down 鍵。

    <input @keydown.down="onDown">
  8. .left: 監聽 Left 鍵。

    <input @keydown.left="onLeft">
  9. .right: 監聽 Right 鍵。

    <input @keydown.right="onRight">
  10. .ctrl: 監聽 Ctrl 鍵。
    <input @keydown.ctrl.enter="save">
  11. .alt: 監聽 Alt 鍵。
    <input @keydown.alt.enter="submit">
  12. .shift: 監聽 Shift 鍵。
    <input @keydown.shift.enter="insertLineBreak">
  13. .meta: 監聽 Meta 鍵(在 Mac 上通常是 Command 鍵,在 Windows 上是 Windows 鍵)。
    <input @keydown.meta.enter="openMenu">

總結

Vue 的指令修飾符極大地增強了 Vue 指令的功能性,使得我們可以更加簡潔和直觀地處理常見的交互邏輯,如表單驗證、事件控制等。理解并正確使用這些修飾符可以使你的代碼更加清晰易懂,同時也能提高開發效率。對于特定場景下的需求,比如需要阻止事件冒泡或者確保輸入值為數字類型等,合理利用修飾符可以讓你的代碼更加健壯和易于維護。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/91417.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/91417.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/91417.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

(RedmiBook)上禁用觸摸板或自帶鍵盤

在紅米筆記本&#xff08;RedmiBook&#xff09;上禁用觸摸板或自帶鍵盤&#xff0c;可以通過以下幾種方法實現&#xff1a; 方法一&#xff1a;通過設備管理器禁用&#xff08;Windows 系統&#xff09; 禁用觸摸板 打開設備管理器 按 Win X → 選擇 “設備管理器”或 Win …

15 - 多模態大語言模型 — 圖文 “牽線” 系統 “成長記”:借 CLIP 練本領,從圖像與文字里精準 “搭鵲橋” 的全過程 (呆瓜版 - 2 號)

目錄 1、基礎&#xff1a;它到底是個啥&#xff1f; 1. 1、一句話理解核心 1.2、 為啥厲害&#xff1f; 1.3、怎么發展來的&#xff1f; 2、架構&#xff1a;它的 “身體構造” 是啥樣的&#xff1f; 2.1、視覺語言模型架構&#xff1a;讓 AI “看懂” 世界的核心系統 2…

Day 4-1: 機器學習算法全面總結

Day 4-1: 機器學習算法全面總結 ?? 學習目標 通過前三天的學習,我們已經掌握了機器學習的基礎知識和經典算法。今天我們來做一個全面總結,為進入深度學習階段做好準備。 ?? 已掌握的核心算法總結 1. 監督學習算法 1.1 回歸算法 算法 核心思想 適用場景 優缺點 線性回…

雨云深度體驗:從安利到教程再到全面評測

零、簡介在云服務市場競爭日益激烈的當下&#xff0c;各類云服務提供商如雨后春筍般涌現。然而&#xff0c;雨云卻憑借其獨特的優勢&#xff0c;在這片紅海之中逐漸嶄露頭角&#xff0c;吸引了眾多個人開發者與企業用戶的目光。接下來&#xff0c;就讓我們全方位、深層次地從安…

luoguP13511 [KOI P13511 [KOI 2025 #1] 等腰直角三角形

P13511 [KOI 2025 #1] 等腰直角三角形 - 洛谷 題目重現 題目描述 在二維平面上有 N 個不同的點。對于每個 1≤i≤N 的 i,第 i 個點的坐標為 (xi?,yi?)。 等腰三角形是指三條邊中有兩條邊長度相等的三角形。直角三角形是指一個內角為直角 (90°) 的三角形。直角三角形的斜…

Qt Quick 動畫與過渡效果

Qt Quick 提供了強大而靈活的動畫系統&#xff0c;使開發者能夠輕松創建流暢、引人入勝的用戶界面。從簡單的屬性變化到復雜的多元素協同動畫&#xff0c;Qt Quick 提供了多種實現方式。本文將深入解析 Qt Quick 動畫與過渡效果的核心技術和最佳實踐。 一、基礎動畫類型 1. 數字…

LlamaIndex 和 Elasticsearch Rerankers:無與倫比的簡潔

作者&#xff1a;來自 Elastic Jeffrey Rengifo 了解如何從 LlamaIndex RankGPT reranker 遷移到 Elastic 內置的 semantic reranker。 Elasticsearch 擁有與行業領先的 Gen AI 工具和服務商的原生集成。查看我們的網絡研討會&#xff0c;了解如何突破 RAG 基礎&#xff0c;或使…

服務器分布式的作用都有什么?

服務器分布式是通過網絡互聯的架構方式&#xff0c;將一個系統中的多臺服務器進行連接并協同工作&#xff0c;把一個服務器中的任務分發到不同的服務器節點上&#xff0c;以此來提高系統的性能、可靠性和可擴展性&#xff0c;下面&#xff0c;我們就來具體了解一下服務器分布式…

cocos打包web - ios設備息屏及前后臺切換音頻播放問題

切換前臺時&#xff0c;延遲暫停與恢復能解決大部分ios平臺前后臺切換后音頻無法恢復的問題&#xff1b; if (cc.sys.isBrowser && cc.sys.os cc.sys.OS_IOS && cc.sys.isMobile) {cc.game.on(cc.game.EVENT_GAME_INITED, () > {cc.game.on(cc.game.EVENT_…

期貨Level2五檔委托簿0.25秒高頻分鐘與日級歷史行情數據解析

在金融數據分析領域&#xff0c;本地CSV格式的期貨數據為研究人員和交易者提供了豐富的原始信息。本文將介紹如何有效利用不同類型的期貨數據&#xff0c;包括分鐘數據、高頻Tick、五檔Level2等&#xff0c;并闡述數據處理與分析方法。一、數據概述期貨分鐘數據通常包含時間戳、…

原生html+js+jq+less 實現時間區間下拉彈窗選擇器

html彈窗<div class"popupForm" id"popupForm10"><div class"pop-box"><i class"iconfont icon-quxiao cancel" onclick"toggleForm(10)"></i><div class"title">選擇時間</div…

基于邏輯回歸、隨機森林、梯度提升樹、XGBoost的廣告點擊預測模型的研究實現

文章目錄有需要本項目的代碼或文檔以及全部資源&#xff0c;或者部署調試可以私信博主一、項目背景與目標二、數據概覽與預處理2.1 數據導入與初步分析2.2 缺失值與重復值處理2.3 目標變量分布三、探索性數據分析&#xff08;EDA&#xff09;3.1 數值變量分布3.2 類別變量分布3…

Docker學習相關視頻筆記(三)

參考視頻地址&#xff1a;40分鐘的Docker實戰攻略&#xff0c;一期視頻精通Docker。感謝作者的辛苦付出。 本文是Docker學習相關視頻筆記&#xff08;一&#xff09;與Docker學習相關視頻筆記&#xff08;二&#xff09;的后續 4、Docker命令 4.8 Docker 網絡 4.8.1 橋接模式…

RK3568筆記九十五:基于FFmpeg和Qt實現簡易視頻播放器

若該文為原創文章,轉載請注明原文出處。 一、開發環境 1、硬件:正點原子ATK-DLRK3568 2、QT: 5.14.2 3、系統: buildroot 二、實現功能 使用ffmpeg音視頻庫軟解碼實現視頻播放器 支持打開多種本地視頻文件(如mp4,mov,avi等) 視頻播放支持實時開始,暫停,繼續播放 采…

【LLM】Kimi-K2模型架構(MuonClip 優化器等)

note Kimi K2 的預訓練階段使用 MuonClip 優化器實現萬億參數模型的穩定高效訓練&#xff0c;在人類高質量數據成為瓶頸的背景下&#xff0c;有效提高 Token 利用效率。MuonClip Optimizer優化器&#xff0c;解決隨著scaling up時的不穩定性。Kimi-K2 與 DeepSeek-R1 架構對比…

Vue基礎(25)_組件與Vue的內置關系(原型鏈)

了解組件與Vue的內置關系前&#xff0c;我們需要回顧js原型鏈基礎知識&#xff1a;1、構造函數構造函數是一種特殊的方法&#xff0c;用于創建和初始化一個新的對象。它們是使用 new 關鍵字和函數調用來創建對象的。構造函數實際上只是一個普通的函數&#xff0c;通常以大寫字母…

kafka中生產者的數據分發策略

在 Kafka 中&#xff0c;生產者的數據分發策略決定了消息如何分配到主題的不同分區。在 Python 中&#xff0c;我們通常使用 kafka-python 庫來操作 Kafka&#xff0c;下面詳細講解其數據分發策略及實現代碼。一、Kafka 生產者數據分發核心概念分區&#xff08;Partition&#…

【動態規劃算法】斐波那契數列模型

一. (1137.)第N個泰波那契數(力扣)1.1動態規劃的算法流程 對于初學者來講學術上的概念晦澀難懂,將用通俗易懂的方式帶來感性的理解. 1.狀態表示dp表(一維或二維數組)里面的值所表示的含義 從哪獲取? 1.題目要求,如本題 2.題目沒有明確說明的情況下做題經驗的累積 3.分析問題的…

Odoo 18 PWA 全面掌握:從架構、實現到高級定制

本文旨在對 Odoo 18 中的漸進式網絡應用&#xff08;Progressive Web App, PWA&#xff09;技術進行一次全面而深入的剖析。本文的目標讀者為 Odoo 技術顧問、高級開發人員及解決方案架構師&#xff0c;旨在提供一份權威的技術參考&#xff0c;以指導 PWA 相關的實施項目與戰略…

Binary Classifier Optimization for Large Language Model Alignment

2025.acl-long.93.pdfhttps://aclanthology.org/2025.acl-long.93.pdf 1. 概述 在生產環境中部署大型語言模型(LLMs)時,對齊LLMs一直是一個關鍵因素,因為預訓練的LLMs容易產生不良輸出。Ouyang等人(2022)引入了基于人類反饋的強化學習(RLHF),該方法涉及基于單個提示的…