Vue3——第十五章(计算属性:computed)

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

一、基础示例

  • 模板中的表达式虽然方便但也只能用来做简单的操作。如果在模板中写太多逻辑会让模板变得臃肿难以维护。
  • 推荐使用计算属性来描述依赖响应式状态的复杂逻辑。
    在这里插入图片描述
  • 在这里定义了一个计算属性 publishedBooksMessage。computed() 方法期望接收一个 getter 函数返回值为一个计算属性 ref
  • 和其他一般的 ref 类似你可以通过 publishedBooksMessage.value 访问计算结果。
  • 计算属性 ref 也会在模板中自动解包因此在模板表达式中引用时无需添加 .value。
  • Vue 的计算属性会自动追踪响应式依赖。它会检测到 publishedBooksMessage 依赖于 author.books所以当 author.books 改变时任何依赖于 publishedBooksMessage 的绑定都会同时更新。

二、计算属性缓存 vs 方法

  • 在表达式中像这样调用一个函数也会获得和计算属性相同的结果
    在这里插入图片描述
  • 若我们将同样的函数定义为一个方法而不是计算属性两种方式在结果上确实是完全相同的
  • 然而不同之处在于计算属性值会基于其响应式依赖被缓存
  • 一个计算属性仅会在其响应式依赖更新时才重新计算。
  • Vue性能优化的一种方式。

三、可写计算属性

  • 计算属性默认是只读的。
  • 当你尝试修改一个计算属性时你会收到一个运行时警告。
  • 只在某些特殊场景中你可能才需要用到“可写”的属性你可以通过同时提供 getter 和 setter 来创建
    在这里插入图片描述
  • 现在当你再运行 fullName.value = 'John Doe'setter 会被调用而 firstNamelastName 会随之更新。

四、最佳实践

1、Getter 不应有副作用

  • 计算属性的 getter 应只做计算而没有任何其他的副作用这一点非常重要。
  • 不要在 getter 中做异步请求或者更改 DOM
  • 一个计算属性的声明中描述的是如何根据其他值派生一个值。
  • 因此 getter 的职责应该仅为计算和返回该值。
  • 可以使用侦听器watch根据其他响应式状态的变更来创建副作用。

2、避免直接修改计算属性值

  • 从计算属性返回的值是派生状态。
  • 可以把它看作是一个“临时快照”每当源状态发生变化时就会创建一个新的快照。
  • 更改快照是没有意义的因此计算属性的返回值应该被视为只读的并且永远不应该被更改——应该更新它所依赖的源状态以触发新的计算。
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: vue