vue2和vue3的v-if与v-for优先级对比

Vue.js 中使用最多的两个指令就是 v-ifv-for,因此我们可能会想要同时使用它们。虽然官方不建议这样做,但有时确实是必须的,我们来了解下他们的工作方式:

  • 在 vue 2.x 中,在一个元素上同时使用 v-ifv-for 时,v-for 会优先作用。
  • 在 vue 3.x 中,v-if 总是优先于 v-for 生效。
    在这里插入图片描述

对比学习

接下来我们通过一个简单的示例来感知下,假设我们想要实现一个极简的 todoList 效果:

在这里插入图片描述

我们有一个 todoList:

const todoList = [{id: 0,task: '吃饭',done: true,},{id: 1,task: '睡觉',done: false,},{id: 2,task: '洗澡',done: true,},// ...,
];

在 vue2 中,v-for 优先级高于 v-if,我们可以这样实现:

<ul><!-- vue2中,v-for优先级高于v-if --><li v-for="item in todoList" v-if="!item.done" :class="{todo: !item.done}" :key="item.id"><span>{{item.task}}</span></li>
</ul><ul><li v-for="item in todoList" v-if="item.done" :class="{finished: item.done}" :key="item.id"><span>{{item.task}}</span></li>
</ul>

在 vue3 中,由于 v-if 优先级要高于 v-for,所以不能像 vue2 那样将 v-forv-if 放在同一个元素上,我们在 li 外面套一层用来执行 for 循环:

<ul><template v-for="item in list" :key="item.id"><li v-if="!item.done" :class="{todo: !item.done}"><span>{{item.task}}</span></li></template>
</ul>
<ul><template v-for="item in list" :key="item.id"><li v-if="item.done" :class="{finished: item.done}"><span>{{item.task}}</span></li></template>
</ul>

可以看出,如果在 vue2.x 中 v-ifv-for 在同一个元素上使用是无法直接在 vue3.x 中兼容的。

最佳实践

针对 v-ifv-for 的使用,其实官方是建议我们使用计算属性来处理的,这样既提高了性能,又可以兼容到 vue3.x,接下来我们看看计算属性实现方式:

模板部分:

<div id="app"><!--  最佳实践  --><ul class="todo-list"><li v-for="item in todos" class="todo" :key="item.id"><span>{{item.task}}</span></li></ul><ul v-if="showFinished"><li v-for="item in finished" :key="item.id" class="finished"><span>{{item.task}}</span></li></ul><p>show finished?<input type="checkbox" v-model="showFinished" />{{showFinished ? 'yes' : 'no'}}</p>
</div>

js 部分:

// vue3.x
Vue.createApp({data() {return {msg: 'Todo List',showFinished: true,list: todoList,};},computed: {finished() {return todoList.filter(t => t.done);},todos() {return todoList.filter(t => !t.done);},},
}).mount('#app');// vue2.x
new Vue({el: '#app',data() {return {msg: 'Todo List',showFinished: true,list: todoList,};},computed: {finished() {return todoList.filter(t => t.done);},todos() {return todoList.filter(t => !t.done);},},
});

点击查看:vue3示例、vue2示例

总结

  1. vue2.x 中v-for优先级高于v-if,vue3.x 相反;
  2. 尽量避免在同一个元素上面同时使用v-ifv-for,建议使用计算属性替代。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/56.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【第七届openGauss技术文章征集】 openGauss新版本征文活动来啦!

活动背景 2024年3月30日&#xff0c;openGauss 6.0.0版本正式上线&#xff0c;该版本与之前版本特性功能保持兼容&#xff0c;在内核能力、DataPod三层资源池化架构、DataKit数据全生命周期管理平台、生态兼容性等方面全面增强。&#xff08;下方【点击原文】即可查看更多【新…

【GPT-4最新研究】GPT-4与科学探索:揭秘语言模型在科学领域的无限可能

各位朋友们&#xff0c;你们知道吗&#xff1f;自然语言处理领域最近取得了巨大的突破&#xff01;大型语言模型&#xff08;LLM&#xff09;的出现&#xff0c;简直就像打开了新世界的大门。它们不仅在语言理解、生成和翻译方面表现出色&#xff0c;还能涉足许多其他领域&…

【绘图案例-屏幕截图 Objective-C语言】

一、屏幕截图 1.接下来,我们来说这个屏幕截图, 1.看一下我们的ppt, 屏幕截图呢,核心代码,也就是一句话, 我们看ppt上说,有时候需要从屏幕上的某一个View啊,截取一个图片出来,然后呢,这个里边儿,它举的一个例子,就是这个东西,捕鱼达人的这个图片,实际上,屏幕截图…

突破界限:LangChain 引领 AI 应用构建的新时代

前言 在上一篇文章中我们对 ChatWithPDF 的方案设计进行了整体的概览&#xff0c;现在细化下整体流程&#xff0c;如下图所示&#xff1a; 针对上面的流程&#xff0c;我们思考&#x1f914;一下会面临的问题&#xff1a; 如何读取 PDF 中的内容&#xff1f;&#xff08;肯定…

一些重新开始面试之后的八股文汇总

一、内存中各项名词说明 1、机器内存概念说明 linux中的free命令可以查看机器的内存使用情况&#xff0c;vmstat命令也可以 其中不容易被理解的是&#xff1a; 内存缓冲/存数&#xff08;buffer/cached&#xff09; 1.buffers和cache也是RAM划分出来的一部分地址空间 2.buff…

如何利用逻辑引擎的对象变量节点优化表单数据处理?

JVS逻辑引擎-对象变量节点 概述 对象变量是面向对象编程中的一个重要概念。在编程中&#xff0c;对象变量用于存储对象的引用。在Java中&#xff0c;使用“类名变量名”可以创建一个对象变量&#xff0c;但此时对象变量本身并没有任何值。要赋予对象变量具体的值&#xff0c;…

Type-C接口PD取电IC6500

一、引言 随着科技的不断进步&#xff0c;移动设备已经成为我们日常生活中不可或缺的一部分。其中&#xff0c;电源管理对于确保设备的稳定运行和延长电池寿命至关重要。Type-C接口作为现代移动设备的主要电源和数据接口&#xff0c;其高效、便捷的特性得到了广泛应用。而Powe…

基于springboot实现音乐网站管理系统项目【项目源码+论文说明】计算机毕业设计

基于SpringBoot实现音乐网站管理系统演示 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了音乐网站的开发全过程。通过分析音乐网站管理的不足&#xff0c;创建了一个计算机管理音乐网站的方案。文章介绍了音乐…

李彦宏:开源模型会越来越落后

李彦宏&#xff1a;开源模型会越来越落后 昨天听完的李总讲座 大家以前用开源觉得开源便宜&#xff0c;其实在大模型场景下&#xff0c;开源是最贵的。所以&#xff0c;开源模型会越来越落后。 ——李彦宏 至于开源还是闭源&#xff0c;这和企业的利益息息相关。 随着科技的迅猛…

新品上市|水深测量专家 HD-680双变频测深仪

自动跟踪 一键测量 测深参数自动调节&#xff0c;换能器内置温度传感器&#xff0c;声速自动解算&#xff0c;提升数据精度&#xff0c;解放双手&#xff0c;提高测量效率。 高低频结合可实时显示淤泥厚度 HD-680双变频测深仪高低频双通道同时工作&#xff0c;全新升级的双频测…

如何使用WinSCP通过固定公网TCP地址实现远程连接内网设备传输文件

文章目录 1. 简介2. 软件下载安装&#xff1a;3. SSH链接服务器4. WinSCP使用公网TCP地址链接本地服务器5. WinSCP使用固定公网TCP地址访问服务器 1. 简介 ​ Winscp是一个支持SSH(Secure SHell)的可视化SCP(Secure Copy)文件传输软件&#xff0c;它的主要功能是在本地与远程计…

VIN车辆识别代码查询API接口是什么

VIN车辆识别代码查询API接口又叫VIN码查询接口、VIN码识别接口、车辆VIN码解析接口、车架号查询车辆信息接口&#xff0c;通过输入车辆VIN识别码&#xff08;车架号&#xff09;获取车辆参数信息&#xff0c;返回车辆品牌、车型、油耗、车身形式、排量等等。那么这个接口如何对…

什么是交叉连接:全面概述

交叉连接是数据中心上下文中使用的术语&#xff0c;指的是在两个单独的硬件单元之间建立直接链接所需的物理电缆和连接。这些连接在促进数据中心内各个组件之间的高效和安全通信方面发挥着至关重要的作用。通过在硬件单元之间创建专用网络链接&#xff0c;交叉连接消除了对基于…

Meta因露骨AI图片陷入困境

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

硬件?、嘉立创EDA画PCB规则设计

1、打开规则设计 设置单位为mil 点击全部 将安全距离设置为8mil&#xff0c;这个8mil是目前很多生产PCB的工厂可以做的&#xff0c;如果距离设置的更小也就是性能要求更高&#xff0c;相应的生产成本也高元件到元件的距离设置为20mil 2、设置导线的宽度规则&#xff0c;可以对v…

敏捷——登录校验/管理事项/Javaweb/后端/Springboot

勋的要求 1 登录后 后端返回一个token 2 数据库 用户表 事项表 用户表&#xff1a;用户名 密码 用户标识&#xff08;id&#xff09; 1 zhangsan 123456 2 zhangsan2 123456 3 zhangsan3 123456 事项表&#xff1a…

ccfcsp201409-3 字符串匹配

#include <bits/stdc.h> using namespace std; string s; int y, n; string o[105]; bool check(char a, char b) { // 大小写不敏感if (a b || a - a b - A || a - A b - a){return true;}return false; } int main() {cin >> s;cin >> y; // 0不敏感1敏…

挣钱新玩法,一文带你掌握流量卡推广秘诀

手机流量卡推广项目是什么&#xff1f;听名字我相信大家就已经猜出来了&#xff0c;就是三大运营商为了开发新用户&#xff0c;发起的有奖推广活动&#xff0c;也是为了长期黏贴用户。在这个活动中&#xff0c;用户通过我们的渠道&#xff0c;就能免费办理低套餐流量卡&#xf…

Linux 搭建私有yum源仓库

一、环境准备 IP系统版本作用192.168.140.155CentOS 7.9.2009yum源仓库192.168.140.153CentOS 7.9.2009测试 准备两台服务器&#xff0c;一台作为yum源仓库&#xff0c;另一台作为测试使用。 二、搭建yum源服务器 &#xff08;无法连接外网的情况&#xff0c;需要去官网下载镜…

【GoWeb框架初探————XORM篇】

1. XORM xorm 是一个简单而强大的Go语言ORM库. 通过它可以使数据库操作非常简便。 1.1 特性 支持 Struct 和数据库表之间的灵活映射&#xff0c;并支持自动同步事务支持同时支持原始SQL语句和ORM操作的混合执行使用连写来简化调用支持使用ID, In, Where, Limit, Join, Havi…