如何在 Vue 项目中使用v - for指令进行列表渲染,如何优化其性能?
大白话如何在 Vue 项目中使用v - for指令进行列表渲染,如何优化其性能?
在Vue项目里,咱们常常会碰到要把一组数据渲染成列表的状况。这时候,v-for
指令就派上大用场啦!它能让咱们轻松地把数据数组里的每个元素渲染成对应的HTML元素。接下来,我会详细跟你讲讲怎么用v-for
指令做列表渲染,还会告诉你怎么优化它的性能。
1. 基础的v-for
使用
首先,咱们来看一个简单的例子,就是用v-for
来渲染一个数组里的元素。假设咱们有一个包含水果名称的数组,咱们要把这些水果名称都显示在网页上。
<template><!-- 这里定义了一个无序列表 --><ul><!-- 使用 v-for 指令遍历 fruits 数组,item 是当前遍历到的元素,index 是元素的索引 --><li v-for="(item, index) in fruits" :key="index"><!-- 显示当前元素的索引和值 -->{{ index }} - {{ item }}</li></ul>
</template><script>
export default {data() {return {// 定义一个包含水果名称的数组fruits: ['苹果', '香蕉', '橙子', '葡萄']};}
};
</script>
在上面的代码里,v-for
指令会遍历fruits
数组。对于数组里的每个元素,它都会创建一个<li>
标签,然后把元素的索引和值显示出来。key
属性在这儿也很重要,它能帮助Vue识别每个元素,这样在更新列表的时候就能更高效。
2. 用v-for
渲染对象
除了数组,v-for
还能用来渲染对象。下面是一个渲染对象属性的例子:
<template><!-- 这里定义了一个无序列表 --><ul><!-- 使用 v-for 指令遍历 user 对象,value 是属性值,key 是属性名,index 是索引 --><li v-for="(value, key, index) in user" :key="key"><!-- 显示索引、属性名和属性值 -->{{ index }} - {{ key }}: {{ value }}</li></ul>
</template><script>
export default {data() {return {// 定义一个包含用户信息的对象user: {name: '张三',age: 25,gender: '男'}};}
};
</script>
在这个例子中,v-for
指令会遍历user
对象的每个属性。对于每个属性,它会创建一个<li>
标签,然后把属性的索引、名称和值显示出来。
3. v-for
性能优化
虽然v-for
用起来很方便,但在处理大量数据的时候,可能会影响性能。下面是一些优化v-for
性能的方法:
3.1 使用key
属性
就像前面提到的,key
属性能帮助Vue识别每个元素。当列表更新时,Vue会根据key
来判断哪些元素需要更新,哪些可以复用,这样就能减少不必要的DOM操作。所以,尽量给v-for
的元素加上唯一的key
。比如,在渲染用户列表的时候,用用户的ID作为key
:
<template><!-- 这里定义了一个无序列表 --><ul><!-- 使用 v-for 指令遍历 users 数组,user 是当前用户对象,使用 user.id 作为 key --><li v-for="user in users" :key="user.id"><!-- 显示用户的姓名 -->{{ user.name }}</li></ul>
</template><script>
export default {data() {return {// 定义一个包含用户信息的数组users: [{ id: 1, name: '张三' },{ id: 2, name: '李四' },{ id: 3, name: '王五' }]};}
};
</script>
3.2 避免在v-for
里使用复杂的表达式
在v-for
的循环里,如果使用复杂的表达式,每次循环都会计算这些表达式,这会影响性能。所以,尽量把复杂的逻辑提取到计算属性或者方法里。比如:
<template><!-- 这里定义了一个无序列表 --><ul><!-- 使用 v-for 指令遍历 numbers 数组,num 是当前数字 --><li v-for="num in numbers" :key="num"><!-- 调用 getSquare 方法计算数字的平方并显示 -->{{ getSquare(num) }}</li></ul>
</template><script>
export default {data() {return {// 定义一个包含数字的数组numbers: [1, 2, 3, 4, 5]};},methods: {// 定义一个方法,用于计算数字的平方getSquare(num) {return num * num;}}
};
</script>
在这个例子中,把计算数字平方的逻辑放到了getSquare
方法里,这样就避免了在v-for
循环里进行复杂的计算。
通过上面这些方法,你就能在Vue项目里熟练使用v-for
指令进行列表渲染,还能优化它的性能啦!
在使用v-for指令时,:key的作用是什么?
在Vue里使用v-for
指令时,:key
是一个非常重要的属性,它有着至关重要的作用,下面我将详细地为你介绍:
1. 帮助Vue识别节点
Vue在更新使用v-for
渲染的元素列表时,会基于key
来识别每个节点。这样做的好处是,Vue能够精准地判断哪些元素发生了变化,哪些元素可以直接复用,哪些元素需要被移除或添加。
举个例子,假设你有一个包含三个元素的列表:
<template><ul><li v-for="item in items" :key="item.id">{{ item.name }}</li></ul>
</template><script>
export default {data() {return {items: [{ id: 1, name: '苹果' },{ id: 2, name: '香蕉' },{ id: 3, name: '橙子' }]};}
};
</script>
在这个例子中,每个<li>
元素都有一个唯一的key
,这个key
就是item.id
。当列表数据发生变化时,比如添加、删除或者重新排序元素,Vue会根据key
来识别每个节点,从而高效地更新DOM。
2. 提高渲染性能
如果没有提供key
,Vue默认会采用“就地复用”的策略。这意味着当列表顺序发生改变时,Vue可能会直接复用已有的DOM元素,而不是移动它们。这种方式在某些情况下可能会导致一些问题,比如表单输入状态丢失等。
而当你为每个元素提供了唯一的key
后,Vue会使用一种更高效的算法来更新DOM,它会尽可能地复用已有的DOM元素,同时准确地移动、添加或删除元素,从而减少不必要的DOM操作,提高渲染性能。
3. 保持组件状态
在使用v-for
渲染组件列表时,key
还能帮助Vue保持组件的状态。每个组件都有自己的状态,当列表更新时,如果没有key
,Vue可能会错误地复用组件,导致组件状态混乱。而有了唯一的key
,Vue就能正确地识别每个组件,确保组件状态的正确更新。
例如:
<template><div><MyComponent v-for="item in items" :key="item.id" :data="item"></MyComponent></div>
</template><script>
import MyComponent from './MyComponent.vue';export default {components: {MyComponent},data() {return {items: [{ id: 1, data: '数据1' },{ id: 2, data: '数据2' },{ id: 3, data: '数据3' }]};}
};
</script>
在这个例子中,每个MyComponent
组件都有一个唯一的key
,这样当列表数据更新时,Vue就能正确地更新每个组件的状态。
4. key
的使用注意事项
- 唯一性:
key
的值必须是唯一的,这样才能准确地识别每个元素。通常可以使用数据的ID作为key
。 - 避免使用索引:虽然可以使用索引作为
key
,但不建议这样做。因为当列表顺序发生改变时,索引也会随之改变,这可能会导致Vue无法正确识别元素,从而引发性能问题或状态混乱。
综上所述,在使用v-for
指令时,为每个元素提供唯一的key
是非常必要的,它能帮助Vue高效地更新DOM,提高渲染性能,同时保持组件状态的正确性。
在使用v-for
指令时,不使用key
会有什么问题?
在使用v-for
指令时,若不使用key
,可能会引发以下几方面问题:
1. 渲染效率较低
Vue默认采用“就地复用”策略。当列表数据发生变化时,比如列表顺序改变,Vue不会去移动DOM元素,而是直接复用当前位置上的元素。这种做法看似简单,但实际上会进行较多不必要的DOM操作。
举个例子,假设原本的列表是['苹果', '香蕉', '橙子']
,渲染为三个<li>
元素。现在列表变为['香蕉', '苹果', '橙子']
。如果没有key
,Vue不会将第一个<li>
元素和第二个<li>
元素交换位置,而是直接修改第一个<li>
元素的文本内容为“香蕉”,第二个为“苹果”。当列表元素数量较多时,这样的操作会大大增加DOM操作的次数,从而降低渲染效率。
2. 状态丢失问题
在渲染带有输入框、复选框等表单元素的列表时,不使用key
会导致表单元素的状态丢失。这是因为Vue无法准确区分每个元素,当列表更新时,可能会错误地复用表单元素的状态。
以下是一段示例代码:
<template><div><ul><!-- 没有使用 key --><li v-for="item in items"><input type="text" v-model="item.value">{{ item.name }}</li></ul><button @click="reverseList">反转列表</button></div>
</template><script>
export default {data() {return {items: [{ name: '苹果', value: '' },{ name: '香蕉', value: '' },{ name: '橙子', value: '' }]};},methods: {reverseList() {this.items.reverse();}}
};
</script>
在这个例子中,当你点击“反转列表”按钮时,由于没有使用key
,输入框内的内容不会随着列表元素的位置改变而移动,而是保持在原来的位置,这就造成了状态丢失。
3. 组件状态混乱
当使用v-for
渲染组件列表时,不使用key
会使Vue难以正确管理组件的状态。每个组件都有自己的生命周期和状态,没有key
,Vue可能会错误地复用组件实例,导致组件状态混乱。
例如:
<template><div><!-- 没有使用 key --><MyComponent v-for="item in items" :data="item"></MyComponent><button @click="reverseList">反转列表</button></div>
</template><script>
import MyComponent from './MyComponent.vue';export default {components: {MyComponent},data() {return {items: [{ id: 1, data: '数据1' },{ id: 2, data: '数据2' },{ id: 3, data: '数据3' }]};},methods: {reverseList() {this.items.reverse();}}
};
</script>
在这个例子中,点击“反转列表”按钮后,由于没有key
,MyComponent
组件的状态可能不会正确更新,导致显示异常。
综上所述,为了提高渲染效率、避免状态丢失和组件状态混乱等问题,在使用v-for
指令时,建议为每个元素提供唯一的key
。
除了key
属性,还有哪些方法可以提高v-for
指令的渲染性能?
除了使用 key
属性外,还有不少方法能够提高 v-for
指令的渲染性能,下面为你详细介绍:
1. 利用计算属性过滤数据
如果需要对列表数据进行筛选或者排序,不要直接在 v-for
指令里使用复杂的表达式,而是应该把这些逻辑放到计算属性中。计算属性具备缓存功能,只要依赖的数据不发生变化,就不会重新计算,这样能减少不必要的计算操作。
示例代码如下:
<template><ul><!-- 使用计算属性 filteredItems 渲染列表 --><li v-for="item in filteredItems" :key="item.id">{{ item.name }}</li></ul>
</template><script>
export default {data() {return {// 原始数据列表items: [{ id: 1, name: '苹果', category: '水果' },{ id: 2, name: '香蕉', category: '水果' },{ id: 3, name: '土豆', category: '蔬菜' }],// 过滤条件selectedCategory: '水果'};},computed: {// 计算属性,根据 selectedCategory 过滤 items 列表filteredItems() {return this.items.filter(item => item.category === this.selectedCategory);}}
};
</script>
2. 批量更新数据
在修改列表数据时,尽量批量更新数据,而不是频繁地进行单个数据的修改。因为每次数据更新都会触发 Vue 的响应式更新机制,频繁更新会带来额外的性能开销。
示例代码如下:
<template><div><ul><li v-for="item in items" :key="item.id">{{ item.name }}</li></ul><button @click="updateItems">批量更新</button></div>
</template><script>
export default {data() {return {items: [{ id: 1, name: '苹果' },{ id: 2, name: '香蕉' },{ id: 3, name: '橙子' }]};},methods: {updateItems() {// 批量更新数据const newItems = this.items.map(item => ({...item,name: item.name + '(已更新)'}));this.items = newItems;}}
};
</script>
3. 使用虚拟列表
当列表数据量非常大时,一次性渲染所有列表项会导致性能问题。这时可以使用虚拟列表技术,只渲染当前可见区域内的列表项,当用户滚动列表时,动态加载和渲染新的列表项。
在 Vue 中,可以借助第三方库(如 vue-virtual-scroller
)来实现虚拟列表。以下是一个简单的使用示例:
<template><div><!-- 使用 vue-virtual-scroller 组件 --><RecycleScrollerclass="scroller":items="items":item-size="30"key-field="id"><template #item="{ item }"><div>{{ item.name }}</div></template></RecycleScroller></div>
</template><script>
import { RecycleScroller } from 'vue-virtual-scroller';
import 'vue-virtual-scroller/dist/vue-virtual-scroller.css';export default {components: {RecycleScroller},data() {return {// 大量数据items: Array.from({ length: 10000 }, (_, i) => ({id: i,name: `Item ${i}`}))};}
};
</script>
4. 减少内联事件处理函数
在 v-for
循环中,尽量减少使用内联事件处理函数。因为每次渲染都会创建新的函数实例,这会带来额外的内存开销。可以把事件处理函数提取到 methods
选项中。
示例代码如下:
<template><ul><!-- 调用 methods 中的 handleClick 方法 --><li v-for="item in items" :key="item.id" @click="handleClick(item)">{{ item.name }}</li></ul>
</template><script>
export default {data() {return {items: [{ id: 1, name: '苹果' },{ id: 2, name: '香蕉' },{ id: 3, name: '橙子' }]};},methods: {handleClick(item) {console.log(`点击了 ${item.name}`);}}
};
</script>
通过上述方法,可以有效提升 v-for
指令的渲染性能,尤其在处理大量数据时,这些优化手段的效果会更加明显。
相关文章:
如何在 Vue 项目中使用v - for指令进行列表渲染,如何优化其性能?
大白话如何在 Vue 项目中使用v - for指令进行列表渲染,如何优化其性能? 在Vue项目里,咱们常常会碰到要把一组数据渲染成列表的状况。这时候,v-for指令就派上大用场啦!它能让咱们轻松地把数据数组里的每个元素渲染成对…...
Notepad++ 替换 换行符 为 逗号
多行转一行,逗号分隔 SPO2025032575773 SPO2025032575772 SPO2025032575771 SPO2025032575771 SPO2025032575770为了方便快速替换,我们需要先知道这样类型的数据都存在哪些换行符。 点击【视图】-【显示符号】-【显示行尾符】 对于显示的行尾换行符【C…...
《基于机器学习发电数据电量预测》开题报告
个人主页:大数据蟒行探索者 目录 一、选题背景、研究意义及文献综述 (一)选题背景 (二)选题意义 (三)文献综述 1. 国内外研究现状 2. 未来方向展望 二、研究的基本内容,拟解…...
【Linux】MAC帧
目录 一、MAC帧 (一)IP地址和MAC地址 (二)MAC帧格式 (三)MTU对IP协议的影响、 (四)MTU对UDP协议的影响 (五)MTU对TCP协议的影响 二、以太网协议 &…...
企业入驻成都国际数字影像产业园,可享150多项专业服务
企业入驻成都国际数字影像产业园,可享150多项专业服务 全方位赋能,助力影像企业腾飞 入驻成都国际数字影像产业园,企业将获得一个涵盖超过150项专业服务的全周期、一站式支持体系,旨在精准解决企业发展各阶段的核心需求…...
飞速(FS)企业网布线解决方案:赋能能源行业客户高效网络部署与智能化管理
国家:中国 行业:能源与公用事业 网络类型:楼宇主干局域网 方案类型:企业网络布线 案例亮点 部署高密度、高性能飞速(FS)24口千兆企业级交换机,有效节省客户机房安装空间,提高并发…...
前端性能优化方案总结
首屏加载优化 把老版本的库替换成新版本,支持tree shaking的库,按需引入,只打包用到的部分,大大优化项目体积,加快项目的首屏渲染。 能不用第三方库,就不用第三方库,比如时间格式化,…...
基于ADMM无穷范数检测算法的MIMO通信系统信号检测MATLAB仿真,对比ML,MMSE,ZF以及LAMA
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 ADMM算法 4.2 最大似然ML检测算法 4.3 最小均方误差(MMSE)检测算法 4.4 迫零(ZF)检测算法 4.5 OCD_MMSE 检测算法 4.6 LAMA检测算法 …...
[plugin:vite:import-analysis] Cannot find module ‘vuex\dist\vuex.esm-bundler
我的是升级了uview-plus版本,导致一直报错,即时将版本降回去也报错,需要将package-lock.json和package-lock.yaml文件删掉重新安装软件包...
用Deepseek + Kimi 快速生成高质量的ppt
AI系列文章: AWS AI认证考试中经常提及几个重要的工具介绍 简单理解机器学习中top_k、top_p、temperature三个参数的作用 用Deepseek Kimi 快速生成高质量的ppt 在职场,不管干什么,都少不了和 PPT 打交道:客户交流,…...
【Go万字洗髓经】Golang中sync.Mutex的单机锁:实现原理与底层源码
本章目录 1. sync.Mutex锁的基本用法2. sync.Mutex的核心原理自旋到阻塞的升级过程自旋CAS 饥饿模式 3. sync.Mutex底层源码Mutex结构定义全局常量Mutex.Lock()方法第一次CAS加锁能够成功的前提是?竞态检测 Mutex.lockSlow()lockSlow的局部变量自旋空转state新值构造…...
Maven入门
1、简介 Apache Maven是一个项目管理及自动构建工具,由Apache软件基金会所提供。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。 2、作用 1)依赖导…...
SpringCloud Stream:消息驱动的微服务架构设计
文章目录 引言一、Spring Cloud Stream基础概念二、核心组件和架构三、消息生产者实现四、消息消费者实现五、消息分组与持久化六、消息分区与扩展七、函数式编程模型八、错误处理与重试机制九、测试与监控总结 引言 在当今复杂的分布式系统环境中,微服务架构已经成…...
进程通信(进程池的模拟实现) read write函数复习 Linux ─── 第23课
目录 进程池(process pool) 第一步: 创建并初始化processpool 第二步:主进程对子进程派发任务 补充: 第三步: 子进程执行完退出进程池 回收子进程 进程池的实现 Channel.hpp ProcessPool.hpp Task.hpp main.cc makefile 匿名管道的应用: 进程池 进程池(process po…...
Docker技术全景解析
一、Docker是什么 1.1 定义 Docker是一种容器化技术平台,它通过操作系统级别的虚拟化,将应用程序及其依赖打包成标准化的可移植单元(容器)。这种技术实现了: 环境一致性:消除“在我机器上能跑”的问题进…...
23种设计模式-状态(State)设计模式
状态设计模式 🚩什么是状态设计模式?🚩状态设计模式的特点🚩状态设计模式的结构🚩状态设计模式的优缺点🚩状态设计模式的Java实现🚩代码总结🚩总结 🚩什么是状态设计模式…...
【计算机网络运输层详解】
文章目录 一、前言二、运输层的功能1. 端到端通信2. 复用与分用3. 差错检测4. 流量控制5. 拥塞控制 三、运输层协议:TCP 和 UDP1. TCP:面向连接的可靠传输协议2. UDP:无连接的传输协议 四、端口号与进程通信1. 端口号分类2. 端口通信模型 五、…...
C# 多标签浏览器 谷歌内核Csharp
采用框架 :FBrowserCEF3lib 视频演示:点我直达 成品下载: https://wwms.lanzouo.com/iYOd42rl8vje...
分布式锁实战:Redis与Redisson的深度解析
一、分布式锁的必要性 在分布式系统中,当多个节点需要对共享资源进行读写操作时,传统的本地锁(如Java的synchronized或ReentrantLock)无法跨节点生效。此时,必须引入分布式锁来保证操作的原子性和一致性。分布式锁需满…...
【Centos7搭建Zabbix4.x监控HCL模拟网络设备:zabbix-server搭建及监控基础05
兰生幽谷,不为莫服而不芳; 君子行义,不为莫知而止休。 5.zabbix监控HCL模拟网络设备 在保证zabbix-server与HCL网络相通的情况下进行如下操作。 5.1创建主机群 配置-主机群-创建主机群 图 19 取名,添加。 图 20 5.2 创建监控…...
如何在 Windows 上安装并使用 Postman?
Postman 是一个功能强大的API测试工具,它可以帮助程序员更轻松地测试和调试 API。在本文中,我们将讨论如何在 Windows 上安装和使用 Postman。 Windows 如何安装和使用 Postman 教程?...
Zabbix监控K8s集群
虽然 Prometheus 被认为是 监控的Kubernetes最合适的工具 ,但其配置复杂、存储成本高以及告警管理繁琐等问题,使得一些传统运维团队更倾向于使用 Zabbix 这样的成熟监控方案。Zabbix 凭借其强大的数据采集、灵活的告警机制和直观的图形化界面,…...
基于硅基流动平台API构建定制化AI服务的实践指南
在人工智能技术快速迭代的今天,硅基流动平台(SiliconFlow)凭借其高效的计算资源调度能力和开放的API接口,成为开发者快速实现AI服务落地的利器。本文将深入探讨如何通过硅基流动平台的API构建一个轻量级AI服务接口,并提…...
自动驾驶系统的车辆动力学建模:自行车模型与汽车模型的对比分析
在自动驾驶系统的车辆动力学建模中,自行车模型(Bicycle Model)和更复杂的汽车模型(如双轨模型或多体动力学模型)各有其适用场景和优缺点。以下是两者的详细对比及选择原因解析: 1. 模型定义与核心差异 特性自行车模型复杂汽车模型(如双轨模型)简化假设将四轮车辆简化为…...
element-ui messageBox 组件源码分享
messageBox 弹框组件源码分享,主要从以下两个方面: 1、messageBox 组件页面结构。 2、messageBox 组件属性。 一、组件页面结构。 二、组件属性。 2.1 title 标题,类型为 string,无默认值。 2.2 message 消息正文内容…...
洛谷题单1-B2025 输出字符菱形-python-流程图重构
题目描述 用 * 构造一个对角线长 5 5 5 个字符,倾斜放置的菱形。 输入格式 没有输入要求。 输出格式 如样例所示。用 * 构成的菱形。 输入输出样例 #1 输入 #1 输出 #1 **** *********方式-前半区推导,后半区逆序 代码 class Solution:static…...
23中设计模式-迭代器(Iterator)设计模式
迭代器设计模式 🚩什么是迭代器设计模式?🚩迭代器设计模式的特点🚩迭代器设计模式的结构🚩迭代器设计模式的优缺点🚩迭代器设计模式的Java实现🚩代码总结🚩总结 🚩什么是…...
第十三章:优化内存管理_《C++性能优化指南》_notes
优化内存管理 一、内存管理基础概念二、自定义分配器三、智能指针优化重点知识代码示例:智能指针性能对比 四、性能优化关键点总结多选题设计题答案与详解多选题答案设计题示例答案(第1题) 一、内存管理基础概念 重点知识 动态内存分配开销…...
requestAnimationFrame和requestIdleCallback分别是什么,是用在什么场景下
深入解析 requestAnimationFrame 和 requestIdleCallback requestAnimationFrame (rAF) 和 requestIdleCallback (rIC) 都是浏览器提供的 异步调度 API,但它们的执行时机和用途完全不同。 API主要用途何时执行是否保证执行适合场景requestAnimationFrame高优先级 U…...
SAP-ABAP:SAP BW模块架构与实战应用详解
SAP BW模块架构与实战应用详解 目录导航 核心架构分层设计数据建模关键技术典型行业应用场景BW/4HANA革新特性实施路线图常见问题解决方案学习资源推荐一、核心架构分层设计 1. 数据仓库层(Data Warehousing Layer) 组件功能说明典型对象🔄 ETL引擎数据抽取、转换、加载Da…...
准确--配置服务器文件数
某些系统可能在 /etc/security/limits.d/ 目录下有额外配置覆盖全局设置。检查是否存在冲突文件: ls /etc/security/limits.d/如果有文件(如 90-nproc.conf 或 90-nofile.conf),需编辑或删除这些文件中的冲突配置。 确保系统启用…...
揭秘大数据 | 12、大数据的五大问题 之 大数据管理与大数据分析
书接上文,老夫讲到规划大数据战略、构建大数据的解决方案与体系架构、解决大数据问题及大数据发展历程中通常会依次涉及到大数据存储、大数据管理、大数据分析、数据科学、大数据应用这五大问题。上篇内容主要围绕的是大数据存储,今天主要聊一下大数据管…...
Java操作RabbitMQ
文章目录 Spring集成RabbitMQ1. AMQP&SpringAMQP2. SpringBoot集成RabbitMQ3. 模型work模型 4.交换机Fanout交换机Direct交换机Topic交换机 5.声明式队列和交换机基于API声明基于注解声明 6.消息转换器 Spring集成RabbitMQ 1. AMQP&SpringAMQP AMQP(高级消…...
【MySQL】实战篇—项目需求分析:ER图的绘制与关系模型设计
在软件开发中,数据库是信息系统的核心部分,合理的数据库设计能够显著提高系统的性能和可维护性。 ER图(实体-关系图)是数据库设计的重要工具,它通过图形化的方式描述了数据实体及其相互关系,帮助开发者和设…...
Apache Shiro 统一化实现多端登录(PC端移动端)
Apache Shiro 是一个强大且易用的Java安全框架,提供了身份验证、授权、密码学和会话管理等功能。它被广泛用于保护各种类型的应用程序,包括Web应用、桌面应用、RESTful服务、移动端应用和大型企业级应用。 需求背景 在当今数字化浪潮的推动下ÿ…...
es新增运算符
?? ( 空值合并运算符) ?. (可选链式运算符) ?? (空值合并赋值操作符) // ?? ( 空值合并运算符):这个运算符主要是左侧为null和undefined,直接返回右侧值 let result value ?? 默认值;. ??(空值合并运算符) ✅ 用于…...
数据库三级填空+应用(2)
sysadmin、dbcreator 数据是面向主题的(2)、集成的、非易失的、随时间不断变化的数据集合, 数据字典 【答案】完整性约束 数据模型成分 33【解析】顺序图主要用于描述系统内对象之间的消息发送和接收序列。 34如果把舍弃的元组也保存在结果关…...
贪心算法经典应用:最优答疑调度策略详解与Python实现
目录 引言:从现实场景到算法设计 一、问题背景与数学建模 1.1 现实场景抽象 1.2 时间线分析 二、贪心策略的数学证明与选择依据 2.1 贪心选择性质 2.2 证明过程 三、算法实现与代码解析 3.1 算法步骤分解 3.2 代码亮点解析 四、测试案例与结果验证 4.1 …...
把手搭建vue前后端管理系统-TAB标签通过pinia来进行管理(二十六)
目标:通过pinia的store来进行组件状态的统一管理,这样大家都可以共用到这个组件的状态信息,就可以实现组件的联动 一、添加侧边栏菜单的点击事件: 1、CommonAside.vue里面添加click的事件 <el-menu-itemv-for"item in …...
Python与数据库
目录 一、数据库 1、数据库的概念 2、数据库的表 3、字段详解 二、SQL数据库语句 1、了解SQL命令 2、CREATE命令 3、INSERT命令 三、数据库和SQL命令 四、数据库的查询与修改 1、SELECT命令 2、UPDATE命令 3、DELETE命令 4、DROP TABLE 5、SQL的注意事项 五、处…...
MyBatis中mapper.xml 的sql映射规则
一、SQL 映射文件核心元素 MyBatis 映射文件的顶级元素(按定义顺序): cache:命名空间的缓存配置。cache-ref:引用其他命名空间的缓存。resultMap:自定义结果集映射。sql:可重用的 SQL 片段。i…...
ubuntu22.04安装搜狗输入法保姆教程~
一、添加中文语言支持 1.首先打开设置,找到Language and Region 2.点击Manage Installed Languages 3.点击 Install/Remove Languages... 4.选中Chinese (simplified),点击Apply...
Jenkins 配置python项目和allure
Jenkins新建项目 新建ry-api-auto-test。 添加项目描述,选择gitee令牌。 源码管理,设置仓库地址和凭证。参考我上一篇文章的链接:配置gitee私人令牌和凭证 构建步骤,因为我Jenkins部署在Windows,因此选择batch。…...
keda基于postgresql伸缩dify-api服务
1 概述 dify-api使用postgresql来存储数据,在dify控制台每新建一个聊天机器的聊天框,就会在conversations表里新插入一条记录,并且不断地更新字段updated_at,示例如下: dify# select * from conversations limit 1; …...
蓝桥杯 拼正方形
问题描述 小蓝正在玩拼图游戏。他有: 7385137888721 个 22 的方块10470245 个 11 的方块 他需要从中挑出一些方块来拼出一个正方形。 例如: 用 3 个 22 和 4 个 11 方块可以拼出一个 44 的正方形;用 9 个 22 方块可以拼出一个 66 的正方…...
failed to load steamui.dll”错误:Steam用户的高频崩溃问题解析
当你满心欢喜地双击 Steam 图标,准备进入游戏世界时,屏幕上突然弹出 “failed to load steamui.dll” 的刺眼提示——这是全球数百万 Steam 用户最不愿见到的错误之一。作为 Steam 客户端的核心界面动态链接库文件,steamui.dll 的缺失或损坏会…...
Django之旅:第六节--mysql数据库操作增删改查(二)
前提条件(models.py已经设置好): from django.db import mmodelsclass UserInfo(models.Model):namemodels.CharFIeld(max_length32)passwordmodels.CharFIeld(max_length64)#agemodels.IntegerFIeld()操作数据语法(在views.py文件࿰…...
6. 使用VUE实现前端页面的分级嵌套
1. 说明 在UI设计中,页面中有些部分的占用空间位置是固定不动,有些部分的区域是根据情况进行动态切换的。比如,一个网页的菜单栏和主题内容展示,往往菜单栏区域的导航按钮占用的空间是固定不动的,当用户点击不同按钮时…...
(UI自动化测试web端)第三篇:元素的常用操作方法_浏览器操作
模拟浏览器的常见操作。 1、最大化浏览器窗口 driver.maximize_window()2、浏览器后退、前进、刷新、关闭、退出 # 调用浏览器的后退 driver.back() # 调用浏览器的前进 driver.forward() # 刷新页面 driver.refresh() # 关闭当前窗口 driver.close() # 退出浏览器 driver.q…...
Ubuntu软件包离线下载安装
1、下载软件包tcpd,并在/var/cache/apt/archives目录中查看。 rooteducoder:~# apt-get install -d tcpd Reading package lists... Done Building dependency tree Reading state information... Done The following NEW packages will be installed:tcpd …...