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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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),该方法涉及基于单个提示的…