当前位置: 首页 > news >正文

Vue的学习(三)

目录

一、for循环中key的作用

1‌.提高性能‌:

‌2.优化用户体验‌:

‌3.辅助Vue进行列表渲染‌:

4‌.方便可复用组件的使用‌:

二、methods及computed及wacth的区别

三、过滤器

1.Vue 2 过滤器简介

定义过滤器

使用过滤器

过滤器的串联

注意事项

2.代码示例

3.实现的效果如下:

四、双向数据绑定的原理

五、生命周期钩子函数

1.beforeCreate:

2.created:

3.beforeMount:

4.mouted:

5.beforUpdate:

6.Updated:

7.beforeDestroy:

8.destroyed:

9.activaed:

10.deactivated:

11.errorCapture:

六、结束语


一、for循环中key的作用

在Vue中,使用v-for指令进行列表渲染时,为每个循环的元素添加一个唯一的key属性是非常重要的。这个key的作用主要包括以下几个方面:

1‌.提高性能‌:

Vue通过key属性对每个循环生成的元素进行标识。当数据发生变化时,Vue可以更加高效地识别出新旧元素的对应关系,从而尽可能地复用已经存在的元素,减少重新渲染的开销,提高页面的性能表现‌1。

‌2.优化用户体验‌:

添加key属性可以确保列表中的元素保持稳定的身份,当数据发生变化时,Vue会尽可能地保持之前元素的状态,而不是重新创建或销毁元素,从而避免页面的闪烁或抖动现象,提供更加流畅的用户体验‌1。

‌3.辅助Vue进行列表渲染‌:

在使用v-for指令进行循环渲染时,Vue需要借助key属性来辅助判断列表中的元素是否发生了变化,以决定是否需要重新渲染列表。如果没有提供key属性,Vue会默认使用每个元素在数组中的索引作为key值,但这样会导致问题‌。

4‌.方便可复用组件的使用‌:

添加key属性可以方便地重置组件的内部状态,使组件可以被多次复用,并且每次复用时都能保持独立的状态,而不会被之前的状态所影响‌。

需要注意的是,key属性的值应该是唯一的,并且稳定不变的。最好使用每个元素在数据源中的唯一标识作为key值,避免使用索引(index)来作为key值,以免出现错误的渲染结果‌。

总之,key属性在Vue的循环渲染中起到了重要的作用,可以优化性能、提升用户体验、方便组件复用,是开发Vue应用时不可忽视的重要属性‌。

二、methods及computed及wacth的区别

 介绍:vue.js当中computed和watch都是响应式的一部分,负责根据数据的变化来处理相关的逻辑,但是他们有着非常不同的使用场景和工作机制。而methods是Vue实例中的一个选项,用于定义在Vue实例中可以调用的方法。这些方法可以在模板中通过调用来执行。

  • methods:  methods定义的方法是需要手动调用的,通过调用方法来执行相应的逻辑。用于定义组件的行为或函数,其内的代码在每次调用时都会重新执行。没有缓存机制,无论何时调用都会重新计算和执行。适用于处理事件或触发特定的逻辑场景。
  • computed:  computed是计算属性,用于基于已有相应式数据进行计算,返回一个新的值。具有缓存机制,只有当相关依赖的数据发生变化时才会重新计算。适用于需要依赖多个响应式数据进行复杂计算的场景。
  • watch:  watch是用于侦听属性变化的。你可以对某个响应式数据做实际操作或执行代码,比如发起异步请求或手动更新数据,适合需要进行一些副作用操作场景。watch适用于需要在数据变化时执行某些业务逻辑的场合。

三、过滤器

1.Vue 2 过滤器简介

在Vue 2中,过滤器(Filters)是一种非常有用的功能,它允许开发者对模板中的文本进行格式化处理。这些过滤器可以被视为一种特殊的函数,它们接收一个或多个参数(通常是模板中的文本值),并返回处理后的文本。

定义过滤器

  • 局部过滤器:这些过滤器定义在Vue实例的filters选项中。它们只在该Vue实例的模板中可用。
  • 全局过滤器:通过Vue.filter()方法定义的过滤器可以在任何Vue实例的模板中使用。这种过滤器在应用范围内是全局可访问的。

使用过滤器

在Vue模板中,你可以通过管道符(|)来应用过滤器。将过滤器应用于模板中的表达式时,表达式的值会作为参数传递给过滤器函数,并显示过滤器函数的返回值。

例如,如果你有一个显示日期的数据,并希望将其格式化为更易读的格式,你可以定义一个日期格式化过滤器,并在模板中通过管道符将其应用于日期数据。

过滤器的串联

Vue 2的过滤器支持串联使用,即一个过滤器的输出可以作为下一个过滤器的输入。这使得你能够轻松地将多个过滤器组合起来,实现复杂的文本处理逻辑。

注意事项

  • 过滤器主要用于文本格式化,不应该用于处理复杂的逻辑或改变数据的状态。
  • 在Vue 3中,官方移除了对过滤器的支持,转而推荐使用计算属性(Computed Properties)或方法(Methods)来实现类似的功能。这是因为过滤器虽然简单,但在大型项目中容易被滥用,导致逻辑难以追踪和维护。

2.代码示例

这里我们使用了一个过滤器,来将input框中的小写字符通过过滤器变成大写字母,在div中展示。

<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script src="./../day_01/js/vue.js"></script>
</head><body><div id="app"><input type="text" v-model="msg"><div>{{msg | toUpper}}</div></div><script>//全局过滤器//Vue.filter("过滤器名称",回调函数)//注意:全局过滤器必须写在new Vue() 之前Vue.filter("toUpper", function (val) {console.log("val", val);return val.toUpperCase();})const vm = new Vue({el: "#app",data: {msg: ''}})</script>
</body></html>

3.实现的效果如下:

四、双向数据绑定的原理

  1. 当数据模型中的属性值发生变化时,Vue会通过getter和setter来获取和更新数据。

  2. 当模板中的绑定表达式发生变化时,Vue会通过指令或插值表达式将变化的值传递给对应的数据模型。

  3. Vue内部会通过使用Object.defineProperty()方法对数据模型的属性进行劫持,实现数据的响应式。

  4. 当数据模型的属性值发生变化时,Vue会通过观察者模式通知订阅了该属性的指令和组件更新视图。

  5. 更新视图时,Vue会使用Virtual DOM(虚拟DOM)对比新旧DOM树的差异,然后只更新差异部分的真实DOM,提高渲染效率。

  6. 当用户在视图中进行交互操作时,例如输入框输入文字,Vue会监听到事件并通过事件处理函数更新对应的数据模型。

五、生命周期钩子函数

1.beforeCreate:

创建前  无法通过 vm 实例 访问 data中的数据  以及 methods中的方法.

2.created:

创建后  可以通过 vm 实例 访问 data中的数据  以及 methods中的方法

3.beforeMount:

挂载前  页面呈现的是未经Vue编译的DOM结构;所有对DOM的操作,最终都不奏效

4.mouted:

vue 完成模板的解析并把初始的真实DOM元素放入页面后(挂载完毕)调用, 此时页面呈现的都是经过Vue编译的DOM。对DOM的操作均有效。

至此初始化过程结束,一般再次进行:开启定时器、发送网络请求、订阅消息、绑定自定义事件等初始化操作。

5.beforUpdate:

更新前  数据是新的  页面是旧的   页面与数据不同步

6.Updated:

更新后  数据是新的  页面也是新的   页面与数据同步

7.beforeDestroy:

销毁前  Vue中的 data 及 methods 及 指令 目前都处于可用状态  一般再此阶段取消定时器,取消订阅的消息,解绑自定义的事件等收尾工作.

8.destroyed:

销毁后,此时组件已经被完全销毁,实例中的所有数据,方法,属性,过滤器等都不可以再次使用了。

9.activaed:

组件激活时,和上面的beforDestroy和destroyed用法差不多,但是如果我们需要一个实例,在销毁后再次出现的话,用beforeDestroy和destroyed的话,就太浪费性能了。实例被激活时使用,用于重复激活一个实例的时候。

10.deactivated:

组件未激活时。

11.errorCapture:

错误调用,当捕获一个来自后代组件错误时被调用。

六、结束语

在结束这篇博文之际,我想借此机会再次感谢每一位耐心阅读至此的你。无论是文字间的共鸣,还是观点上的碰撞,都是对我莫大的鼓励与支持。我们共同探索了知识的海洋,分享了思考的火花,或许在某个不经意的瞬间,这些交流已经悄然在你我心中种下了新的灵感与启迪。

在这个信息爆炸的时代,能够静下心来,深入某一领域或话题,本身就是一种难能可贵的品质。希望这篇博文不仅为你提供了一些有价值的信息和见解,更能激发你对世界的好奇心与探索欲。记住,学习是一场没有终点的旅行,让我们携手并进,在未知的旅途中不断发现、学习、成长。

未来,我将继续带着这份热爱与责任,笔耕不辍,努力为大家带来更多有深度、有温度的内容。期待在下一篇文章中,再次与你相遇,共同开启新的知识探索之旅。

最后,如果你喜欢这篇文章,不妨点个赞、分享给你的朋友,或者留下你的宝贵评论,你的反馈是我前进的动力。再次感谢,愿你的每一天都充满阳光与希望,待下一次与各位宝子再次进行交流,我们下篇文章见!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • DeepSeek缓存命中技术,成本降低10倍
  • ElementPlus表单验证报错 formEl.validate is not a function
  • 在线小说|基于java的小说阅读系统小程序(源码+数据库+文档)
  • Llama 3.1 大模型指令微调提升中文能力
  • 数据结构--双链表
  • 《C Primer Plus》第 2 章复习题和编程练习
  • 如何用静态住宅代理实现分布式代理网络
  • (学习总结16)C++模版2
  • 基于Python的B站热门视频可视化分析与挖掘系统
  • Ansible使用kubeadm方式一键安装k8s
  • 详解TCP的三次握手
  • git 合并分支并解决冲突
  • Kubernetes 常用命令、资源配置整理
  • IHostedLifecycleService是如何管理后台任务的
  • 学生请假管理系统
  • 2017-09-12 前端日报
  • Apache的基本使用
  • download使用浅析
  • dva中组件的懒加载
  • HTTP中GET与POST的区别 99%的错误认识
  • Java到底能干嘛?
  • js算法-归并排序(merge_sort)
  • opencv python Meanshift 和 Camshift
  • SQLServer插入数据
  • TCP拥塞控制
  • text-decoration与color属性
  • Zepto.js源码学习之二
  • 初识 webpack
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 规范化安全开发 KOA 手脚架
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 微信开放平台全网发布【失败】的几点排查方法
  • 小程序测试方案初探
  • 赢得Docker挑战最佳实践
  • ​你们这样子,耽误我的工作进度怎么办?
  • #### go map 底层结构 ####
  • #{}和${}的区别?
  • #Linux(make工具和makefile文件以及makefile语法)
  • #每日一题合集#牛客JZ23-JZ33
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • $.each()与$(selector).each()
  • (Oracle)SQL优化技巧(一):分页查询
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (十三)Flask之特殊装饰器详解
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (数据大屏)(Hadoop)基于SSM框架的学院校友管理系统的设计与实现+文档
  • (算法)N皇后问题
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (一)十分简易快速 自己训练样本 opencv级联haar分类器 车牌识别
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • (转)重识new
  • .Net core 6.0 升8.0
  • .net mvc actionresult 返回字符串_.NET架构师知识普及