Vue3计算属性和异步计算属性方式

Vue3中计算属性和异步计算属性的使用方式与Vue2有所不同。接下来将详细讲解Vue3计算属性和异步计算属性的使用方式,并附上两个示例说明。

Vue3计算属性

Vue3中,计算属性仍然是一个非常重要的概念,主要是为了方便我们处理模板中的复杂计算逻辑。Vue3计算属性的使用方法与Vue2基本相同。

基本使用

在Vue3中,可以通过computed选项来定义计算属性,比如我们想要计算一个数组的长度,在模板中直接使用计算属性即可。

<template>
  <div>
    <p v-if="itemsLength">当前列表有{{ itemsLength }}项数据</p>
    <p v-else>当前列表没有数据</p>
  </div>
</template>

<script>
import { reactive, computed } from 'vue'

export default {
  setup() {
    const state = reactive({
      items: [1, 2, 3, 4, 5]
    })

    const itemsLength = computed(() => {
      return state.items.length
    })

    return {
      itemsLength
    }
  }
}
</script>

在上面的代码中,我们使用了Vue3提供的reactive将items对象转化为响应式对象,使用computed函数定义了一个计算属性itemsLength,并返回其值。在模板中,我们直接使用计算属性的值来判断列表是否为空。

setter方法

在Vue3中,计算属性可以设置setter方法,当计算属性的值变化时,调用setter方法。

<template>
  <div>
    <p>{{ fullName }}</p>
    <input v-model="firstName" />
    <input v-model="lastName" />
  </div>
</template>

<script>
import { reactive, computed } from 'vue'

export default {
  setup() {
    const state = reactive({
      firstName: 'John',
      lastName: 'Doe'
    })

    const fullName = computed(
      () => `${state.firstName} ${state.lastName}`,
      (value) => {
        const names = value.split(' ')
        state.firstName = names[0]
        state.lastName = names[1]
      }
    )

    return {
      firstName: state.firstName,
      lastName: state.lastName,
      fullName
    }
  }
}
</script>

在上面的代码中,我们定义了一个计算属性fullName用于拼接firstNamelastName,并设置了setter方法来处理输入框中的数据。

Vue3异步计算属性

异步计算属性指的是计算属性需要异步获取数据的场景,Vue3通过watchEffectmarkRaw函数提供了异步计算属性的支持,下面来一一介绍。

watchEffect实现异步计算属性

在Vue3中,watchEffect用于监听响应式数据变化,并执行相应的回调函数,该函数可以返回计算属性的值。

<template>
  <div>
    <p>{{ asyncName }}</p>
  </div>
</template>

<script>
import { reactive, watchEffect } from 'vue'

export default {
  setup() {
    const state = reactive({
      name: 'John',
      isLoading: false
    })

    const asyncName = watchEffect(async () => {
      state.isLoading = true
      const res = await fetch('https://api.example.com/name')
      const data = await res.json()
      state.isLoading = false
      return data.name
    })

    return {
      asyncName,
      isLoading: state.isLoading
    }
  }
}
</script>

在上面的代码中,我们用watchEffect函数定义了一个异步计算属性asyncName,并根据isLoading状态判断是否显示loading状态。

markRaw禁用响应式

有时候一个值不需要响应式的功能,比如一个常量或者由服务器渲染的内容,Vue3提供了markRaw函数来禁用响应式。

<template>
  <div>
    <p>{{ serverHtml }}</p>
  </div>
</template>

<script>
import { markRaw } from 'vue'

export default {
  setup() {
    const serverHtml = markRaw('<p>Hello World</p>')

    return {
      serverHtml
    }
  }
}
</script>

在上面的代码中,我们使用了markRaw函数来禁用serverHtml对象的响应式,如果我们不禁用响应式,会在控制台输出警告信息。

至此,Vue3计算属性和异步计算属性的使用方式就介绍完了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue3计算属性和异步计算属性方式 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • Vue自定义验证之日期时间选择器详解

    下面我将详细讲解“Vue自定义验证之日期时间选择器详解”的完整攻略。 标题 Vue自定义验证之日期时间选择器详解 正文 在Vue的表单验证中,日期时间选择器的验证是比较常见的一种场景,但是官方提供的一些验证规则可能并不能满足我们的需求。因此,我们需要自定义验证规则来实现更加灵活的表单验证功能。 步骤一:安装依赖包 我们首先需要安装 Vuelidate。它是一…

    Vue 2023年5月28日
    00
  • vue导出excel表格的新手详细教程

    下面是“vue导出excel表格的新手详细教程”的完整攻略: 1. 安装依赖 首先,我们需要安装两个依赖包,file-saver和xlsx,分别用于文件保存和Excel表格的生成: npm install file-saver xlsx –save 2. 生成Excel文件 在Vue组件中,我们创建一个可以导出表格数据的方法,该方法需要调用xlsx库中的u…

    Vue 2023年5月27日
    00
  • Vue手写防抖和节流函数代码详解

    针对你提出的主题 “Vue手写防抖和节流函数代码详解”,我来进行详细讲解。 一、什么是防抖和节流函数 在前端开发中,很多时候会遇到一些需要节流或防抖的场景,例如在频繁进行搜索时,可以使用节流函数,减少无意义的请求;在监听窗口 resize 或滚动事件等操作时,可以使用防抖函数避免频繁执行代码。两种函数的作用如下: 防抖函数:多次触发事件后,函数只会执行一次,…

    Vue 2023年5月28日
    00
  • Vue3计算属性是如何实现的

    Vue3计算属性是基于Vue3的响应式机制实现的。通过使用计算属性,我们可以根据其他属性的值进行计算并返回一个新的值。以下是实现Vue3计算属性的完整攻略: 1. 编写模板 首先,在模板中定义需要计算的属性,并使用计算属性的名称来获取计算结果。例如,下面的模板演示了如何计算两个属性的和: <template> <div> <p&…

    Vue 2023年5月28日
    00
  • Vant中List组件immediate-check=false无效的解决

    下面将详细讲解“Vant中List组件immediate-check=false无效的解决”的完整攻略。 问题描述 使用Vant中的List组件时,通过设置immediate-check属性为false,期望不立即校验表单,但实际情况是,无论怎么设置immediate-check属性,表单都会立即被校验。 解决方法 方案一:升级Vant版本 该问题在Vant…

    Vue 2023年5月28日
    00
  • java实现客户端向服务器发送文件

    实现客户端向服务器发送文件可以通过使用Java的Socket编程实现。如下是实现步骤的完整攻略: 建立Socket连接:服务器端的Socket监听客户端的请求,客户端需要使用Socket来连接服务器。 ServerSocket server = new ServerSocket(12345); 建立时Socket连接后客户端向服务器传输文件,在客户端中使用F…

    Vue 2023年5月28日
    00
  • Vue-cli项目获取本地json文件数据的实例

    下面是我给出的Vue-cli项目获取本地json文件数据的完整攻略: 1. 创建Vue-cli项目 首先我们要创建一个Vue-cli项目。具体的步骤可以参考Vue-cli官方文档。 2. 创建本地JSON文件 接下来我们需要创建本地JSON文件用于存储我们的数据。在项目目录下创建一个data目录,再在data目录下创建一个example.json文件,用来存…

    Vue 2023年5月28日
    00
  • 尤大大新活petite-vue的实现

    首先,需要说明的是,Petite Vue是Vue的一个迷你版本,它依赖Vue 3,并且只有5KB的大小。它是为了在代码质量和性能之间找到一个理想的平衡点,以便开发者可以轻松编写高质量的代码并快速创建精美的交互效果。 Petite Vue使用与Vue 3相同的选项API,但是与Vue相比,它有一些不同之处,例如没有Virtual DOM和响应式系统的支持。在本…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部