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:

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

六、结束语

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

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

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

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

  • 21
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值