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修改数据的时候,表单值回显不正确问题及解决”的问题,我们可以从以下几个方面来进行讲解和解决: 1. 问题描述 在使用Vue进行开发时,经常会遇到修改数据后表单值不回显的问题。例如,我们在表单中填写了一些信息后,提交表单后跳转到列表界面,在列表界面中点击编辑后修改数据,再跳转回来,但是此时表单中的值并没有回显修改的结果,仍然显示的是旧的数据。 2.…

    Vue 2023年5月29日
    00
  • Vue中遍历数组的新方法实例详解

    下面我就为您详细讲解“Vue中遍历数组的新方法实例详解”。 介绍 在Vue 2.6.0版本以后,新增了一个数组方法v-for,它主要用于遍历一个数组并渲染每个数组元素。 v-for能够将一个数组映射为一组元素,并为每个元素执行一次模板,因此它的应用场景非常广泛,尤其在将复杂数据渲染到界面上时,更是体现了它的优势。 下面就重点介绍一下v-for在其中的应用。 …

    Vue 2023年5月28日
    00
  • vue源码nextTick使用及原理解析

    Vue源码nextTick使用及原理解析 1. nextTick的使用 nextTick是Vue实例上的一个方法,该方法用于将回调函数延迟到下次 DOM 更新循环之后执行。Vue在更新 DOM 时是异步执行的,这意味着Vue并不能保证 immediate callback 将在 DOM 更新之后被调用,因为它们可能在同一个更新周期中触发。 而使用 nextT…

    Vue 2023年5月29日
    00
  • 关于js的事件循环机制剖析

    关于js的事件循环机制,我们知道JavaScript是一种单线程的语言,也就是说JavaScript中的代码是按照顺序执行的,遇到耗时的任务会阻塞主线程,导致页面卡顿甚至崩溃。但是JavaScript又有很多需要异步执行,比如Ajax请求、定时器等。所以JavaScript的事件循环机制就应运而生。 事件循环机制的概念 事件循环机制是一个非常重要的概念,它是…

    Vue 2023年5月28日
    00
  • 浅谈Vuex@2.3.0 中的 state 支持函数申明

    关于Vuex2.3.0版本中的state支持函数声明,我们可以分别从以下几个方面进行详细讲解: 什么是Vuex中的state? Vuex@2.3.0版本中state支持函数申明的特性介绍 函数式声明state的优劣势 示例说明 总结 1. 什么是Vuex中的state? 在vue.js中,我们经常遇到组件之间的状态共享问题,这些组件之间的状态是需要共享的,而…

    Vue 2023年5月28日
    00
  • vue打包后生成一个配置文件可以修改IP

    要修改Vue打包后生成的IP地址,需要进行以下步骤: 找到Vue项目的根目录下的config文件夹,其中包含了打包的配置文件,比如’prod.env.js’和’index.js’。 在’prod.env.js’中添加以下代码:API_ROOT: ‘”http://your_server_ip_address/api”‘,其中your_server_ip_ad…

    Vue 2023年5月28日
    00
  • Vue中实现v-for循环遍历图片的方法

    下面是如何使用Vue实现v-for循环遍历图片的完整攻略。 准备工作 首先需要准备好需要遍历显示的图片数组数据,每个数组元素包含图片的URL、标题等信息。例如: data() { return { images: [ { url: ‘https://example.com/image1.jpg’, title: ‘Image 1’ }, { url: ‘ht…

    Vue 2023年5月27日
    00
  • Vuex中actions优雅处理接口请求的方法

    下面是对于“Vuex中actions优雅处理接口请求的方法”的完整攻略: 1. 使用async/await处理接口请求 async/await 是一个结合了 Promise 和 Generator 的语法糖,它能让我们以同步的方式编写异步代码。我们可以通过它来简化数据请求的处理。 首先我们需要在 actions 中编写异步请求函数。例如,我们需要获取用户的信…

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