- 所属专栏:【Vue2】
- 作 者:长安不及十里
- 工作:目前从事电力行业开发
- 目标:全栈开发
- 个人简介:一个正在努力学技术的Java工程师,专注基础和实战分享 ,欢迎咨询!
- 欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信
- 格言:把戏把戏要过手
如何来理解计算属性?
Vue的计算属性是一个能够基于现有的Vue实例数据进行计算的属性,它们的值是根据依赖的数据动态计算而来的,只有在依赖的数据发生变化时才会重新计算,计算属性常常用于模板表达式中,可以将复杂的逻辑计算封装在计算属性中,使模板更加简洁清晰。
我的理解:通过原有的数据动态计算,才能得一个新的属性
几个概念?
计算属性
商品名称:{{ product.name }}
商品价格:{{ salePrice }}
上面的例子中,我们定义了一个商品对象,其中包含了商品的名称、价格和折扣,我们通过计算属性salePrice来计算商品的实际售价,然后在模板表达式中使用它来显示商品的价格,由于salePrice是一个计算属性,它的值会随着商品价格和折扣的变化而动态更新,在这个例子中,我们只需要更新商品对象的价格和折扣属性,就可以实现商品价格的实时更新。
计算属性拥有的两个方法:getter setter 用来实现数据的双向绑定
get与set方法
{{ formSum.sum }}
{{ dataSum.sum }}
{{ theSum }}
我们将上面的案例来改写一种方法,定义方法来写,它有是如何写的呢?
方法
商品名称:{{ product.name }}
商品价格:{{ salePrice() }}
我们可以发现效果是一样的,但是这其实是有区别的?
⏺️使用计算属性的好处是,它具有缓存特性,只有在依赖的数据发生变化时才会重新计算,因此效率更高。
⏺️而使用methods的方法则需要每次调用都重新计算,因此效率较低,此外,使用计算属性还可以将计算逻辑封装在属性中,使代码更加清晰简洁。
⏺️总之,使用计算属性可以提高代码的可读性和可维护性,同时也可以提高程序的运行效率,但是如果逻辑比较复杂或需要处理异步操作,可能需要使用methods来实现。
如何理解帧听属性?
Vue中的侦听属性(watch)是一个很有用的特性,它可以让开发者监听某个特定的数据属性,并在其发生变化时执行一些特定的操作,侦听属性通常用于处理需要在特定属性发生变化时进行异步操作或复杂逻辑处理的情况。
侦听属性
商品名称:{{ product.name }}
商品价格:{{ product.price }}
商品折扣:{{ product.discount }}
商品折后价:{{ salePrice }}
我们可以发现对我们指定的属性进行监听,可以发现一个新值,与旧值,这就方便我们进行一些特定的操作
如何来决定何时使用计算属性与帧听属性?
在Vue中,使用计算属性和侦听属性都可以处理特定的数据变化,但它们的使用场景是不同的,通常来说,当我们需要计算一些值,并将其作为属性暴露给模板时,可以使用计算属性,而当我们需要在某些数据发生变化时,执行一些异步或复杂的操作,可以使用侦听属性。
具体来说,计算属性适用于以下情况:
侦听属性适用于以下情况:
需要注意的是,使用计算属性和侦听属性时需要注意性能问题,计算属性具有缓存机制,只有在依赖的数据发生变化时才会重新计算,因此不会因为频繁计算而降低性能,而侦听属性则不具有缓存机制,每当侦听的属性变化时都会执行一次处理函数,如果处理函数比较耗时,可能会影响页面的性能。
综上所述,使用计算属性和侦听属性时需要根据具体的业务场景和数据变化的情况进行选择,同时也需要注意性能问题。
侦听属性
商品名称:{{ product.name }}
商品价格:{{ product.price }}
商品折扣:{{ product.discount }}
商品折后价:{{ salePrice }}
如果对象内有多个属性,并采用以下写法,则对象内每个属性都会被侦听,每个属性的变化都会执行一次侦听操作。
Vue生命周期是指在一个Vue实例创建、更新和销毁过程中,各个阶段发生的事件和回调函数。Vue的生命周期分为以下8个阶段:
生命周期
商品名称:{{ product.name }}
商品价格:{{ product.price }}
商品折扣:{{ product.discount }}
商品折后价:{{ salePrice() }}
下面我们来详细介绍每个钩子函数的作用和应用场景。
在实例被创建之初,此钩子函数会被调用。此时,Vue实例的数据和方法都还未初始化,因此无法访问data、computed、methods等选项。
这个阶段的应用场景比较少,一般用于插件开发或者扩展Vue功能。例如,可以在这个钩子函数中添加全局指令或者自定义方法。
在实例初始化完成后,此钩子函数会被调用。此时,Vue实例的数据和方法已经被初始化,可以访问data、computed、methods等选项。
这个阶段的应用场景比较多,可以进行一些初始化操作,例如获取数据、初始化事件等。注意,在这个钩子函数中,尚未完成挂载阶段,因此无法访问到DOM。
在Vue实例挂载到DOM上之前,此钩子函数会被调用。此时,Vue实例已经完成了模板的编译,并且将要把编译后的模板挂载到指定的DOM元素上。
这个阶段的应用场景比较少,一般用于在DOM元素挂载之前进行一些操作,例如修改数据、添加样式等。
在Vue实例挂载到DOM上之后,此钩子函数会被调用。此时,Vue实例已经完成了挂载,可以访问到挂载后的DOM元素。
这个阶段的应用场景比较多,可以进行一些与DOM相关的操作,例如初始化插件、设置定时器、绑定事件等。
在Vue实例数据发生变化之前,此钩子函数会被调用。此时,Vue实例的数据已经更新,但是还未重新渲染视图。
这个阶段的应用场景比较少,一般用于在数据更新之前进行一些操作,例如记录数据更新前的状态、取消更新等。
在Vue实例数据发生变化之后,此钩子函数会被调用。此时,Vue实例已经完成了数据更新和重新渲染视图。
这个阶段的应用场景比较多,可以进行一些与DOM相关的操作,例如更新插件、重新绑定事件等。
需要注意的是,在这个钩子函数中,如果修改了数据,会导致无限循环更新的问题,因此要避免在这个钩子函数中修改数据。
在Vue实例销毁之前,此钩子函数会被调用。此时,Vue实例还未被销毁,可以访问到Vue实例的数据和方法。
这个阶段的应用场景比较少,一般用于在Vue实例被销毁之前进行一些清理操作,例如取消定时器、解绑事件等。
在Vue实例被销毁之后,此钩子函数会被调用。此时,Vue实例已经被销毁,无法访问到Vue实例的数据和方法。
这个阶段的应用场景比较少,一般用于在Vue实例被销毁之后进行一些清理操作,例如释放内存、取消引用等。
Vue的数据检测原理是响应式编程的一种实现方式,它通过数据劫持和发布-订阅模式来实现数据的自动更新和视图的响应式更新,具体来说,Vue的数据检测原理主要包括以下几个步骤:
当我们使用Vue创建一个实例时,Vue会对其数据对象进行递归地遍历,将每个属性都转换为getter和setter函数,这个过程就是数据劫持。这样,在我们访问或修改数据对象的属性时,Vue就能够捕获到这个操作,并通过getter和setter函数来实现响应式更新。
Vue通过一个中央事件总线(即Vue实例的 e m i t 和 emit和 emit和on方法)来实现发布-订阅模式。在数据对象被访问或修改时,Vue会自动触发相应的事件,并通知所有订阅了这个事件的Watcher对象。
Watcher对象是Vue的核心概念之一,它负责监测数据的变化并更新视图。每个Watcher对象都对应着一个DOM元素或组件实例,当Watcher对象接收到数据变化的事件时,它会重新计算虚拟DOM树并更新对应的视图。在Vue的内部实现中,Watcher对象被组织成一个树状结构,并使用依赖收集的方式来管理依赖关系,这样就能够避免不必要的DOM操作,提高渲染性能。
为了减少不必要的DOM操作,Vue使用了一些优化策略,例如异步更新队列和批处理机制。当数据发生变化时,Vue会将需要更新的Watcher对象添加到一个异步更新队列中,然后通过nextTick方法来异步执行队列中的更新操作。在执行更新操作时,Vue会尽可能地合并多个更新操作,以减少不必要的DOM操作和渲染开销。
测试
{{ message }}