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

yizhihongxing

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 Router使用方法

    快速掌握 Vue Router 使用方法 Vue Router 是 Vue.js 官方提供的路由管理器。它可以轻松地实现 SPA(单页应用)应用的路由跳转、参数传递、路由嵌套等功能,同时集成了浏览器的前进、后退等操作。 以下是 Vue Router 的完整攻略,帮助你快速掌握 Vue Router 的使用方法。 安装与使用 我们需要通过 npm 安装 vue…

    Vue 2023年5月27日
    00
  • 详解vue中axios请求的封装

    下面我会详细讲解vue中axios请求的封装。 前言 在vue项目开发中,我们经常需要使用到axios进行数据请求。但是,每次使用axios都需要重复的书写请求代码,一方面增加了代码量,另一方面也容易造成代码的维护成本变高。 所以,我们需要将axios请求进行封装,以便于复用和维护代码。 封装步骤 1. 安装axios 在vue项目中,使用axios请求前,…

    Vue 2023年5月28日
    00
  • 详细聊聊Vue中的options选项

    接下来我将详细聊聊Vue中的options选项。 什么是Vue中的options选项 在Vue中,每个组件都可以定义一些可选的选项。这些选项可以用来配置组件的行为和功能。Vue的选项可以分为两类:数据选项和组件选项。 数据选项:Vue组件中的数据选项是一个JavaScript对象,用于传递数据到组件模板中。数据选项包括data、props、computed、…

    Vue 2023年5月28日
    00
  • 详解Vue的常用指令v-if, v-for, v-show,v-else, v-bind, v-on

    接下来我将为大家详细讲解Vue的常用指令v-if、v-for、v-show、v-else、v-bind、v-on的使用方法: v-if v-if指令根据表达式的值的真假来对元素进行条件渲染。即如果表达式的值为true,则显示元素,否则不显示元素。下面是v-if的示例代码: <div v-if="show">显示内容</d…

    Vue 2023年5月28日
    00
  • Vue实现表格中对数据进行转换、处理的方法

    Vue实现表格中对数据进行转换和处理的方法有很多种,下面我将介绍其中两种常用的方法并提供示例说明。 方法一:使用计算属性 使用计算属性对表格中的数据进行转换和处理,只需要在Vue组件中定义一个带有get和set方法的计算属性。例如,我们可以在模板中绑定一个计算属性,这个计算属性会自动更新数据,并最终渲染到表格中。 <template> <t…

    Vue 2023年5月27日
    00
  • vant时间控件使用方法详解

    Vant 时间控件使用方法详解 概述 Vant 是一款基于 Vue.js 的移动端组件库,其中包括了时间选择器(Picker)和日期选择器(DatetimePicker)等常用的时间控件。本文将详细介绍如何安装和使用 Vant 时间控件。 安装 通过 npm 安装 Vant: npm install vant -S 在 main.js 中引入 Vant: i…

    Vue 2023年5月29日
    00
  • vue中v-text / v-html使用实例代码详解

    当我们使用Vue.js开发Web应用程序时,我们常常需要在模板中显示动态生成的内容。Vue.js为我们提供了两个指令 v-text 和 v-html,可以方便地将动态生成的内容渲染到HTML浏览器中,并避免XSS攻击。下面详细介绍这两个指令的使用方法。 v-text指令 v-text指令用于将数据绑定到元素的文本内容中。它会将Vue实例中对应的数据对象的值动…

    Vue 2023年5月27日
    00
  • vue项目中form data形式传参方式

    在 Vue 项目中,直接利用 form 表单的方式进行数据传递是非常常见的。在 Vue 中,我们可以利用 axios 与后端进行通信,并将 form data 格式的数据进行传递。 以下是利用 axios 技术实现的参数传递方式示例: <template> <form @submit.prevent="submitForm&quo…

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