浅谈vue3中effect与computed的亲密关系

浅谈vue3中effect与computed的亲密关系

什么是effect和computed

在vue3中,effect和computed是两种常用的API。effect是用来观察响应式状态的变化,而computed是用来派生一个新的响应式状态,根据已有的响应式状态计算出新的响应式状态的值。

effect

下面是一个简单的示例,演示了如何通过effect去观察响应式状态的变化:

import { effect, reactive } from 'vue'

const state = reactive({
  count: 0
})

effect(() => {
  console.log(state.count)
})

state.count++
// 控制台输出:
// 0
// 1

effect接受一个包含响应式状态读取操作的函数,如果其中的状态发生变化,那么这个函数就会被重新执行。

computed

下面是一个简单的示例,演示了如何通过computed去派生新的响应式状态:

import { computed, reactive, toRefs } from 'vue'

const state = reactive({
  count: 0
})

const doubleCount = computed(() => {
  return state.count * 2
})

console.log(doubleCount.value) // 0

state.count++
console.log(doubleCount.value) // 2

computed接受一个计算函数,这个函数中的所有响应式状态都会被自动追踪,如果其中的状态发生变化,那么这个计算函数就会被重新执行。

effect与computed之间的关系

effect和computed之间有一个很亲密的关系,就是在computed中使用到的响应式状态,会被自动追踪,即使这个响应式状态是在effect中被修改的。下面是一个示例:

import { computed, effect, reactive, toRefs } from 'vue'

const state = reactive({
  count: 0
})

effect(() => {
  state.count++
})

const doubleCount = computed(() => {
  return state.count * 2
})

console.log(doubleCount.value) // 2
console.log(doubleCount.value) // 4
console.log(doubleCount.value) // 6

我的理解是,在执行computed时,会对其中依赖的响应式状态进行绑定,这个绑定感觉类似于一个依赖于关系。如果这个响应式状态在计算函数执行过程中发生了变化,那么这个计算函数就会被重新执行。

但是在执行effect时,实际上也是会进行响应式状态追踪的,只是没有像computed一样绑定到计算函数上。

computed的高级用法

之前提到过,computed是派生一个新的响应式状态,这个新的响应式状态的值,是基于已有的响应式状态计算出来的。computed的计算函数,可以类比为计算属性。同样的,计算函数中也支持getter和setter。

下面是一个示例,演示computed的高级用法:

import { computed, reactive } from 'vue'

const state = reactive({
  count: 0
})

const doubleCount = computed({
  get: () => state.count * 2,
  set: (value) => {
    state.count = value / 2
  }
})

console.log(doubleCount.value) // 0

doubleCount.value = 10
console.log(state.count) // 5
console.log(doubleCount.value) // 10

在这个示例中,computed接受一个对象参数,其中包含了get和set方法。get方法用于计算新的响应式状态,set方法用于更新已有的响应式状态。在这个示例中,doubleCount既可以当做计算属性使用,也可以当做响应式状态使用,可以通过赋值的方式修改它,也可以观察它的变化。

总结

在vue3中,effect和computed是非常常用的API,它们可以用于观察响应式状态的变化和派生新的响应式状态。它们之间存在亲密关系,因为computed的计算函数中使用的响应式状态,会被自动追踪,而且即使这个响应式状态是在effect中被修改的。除此之外,computed还有一些高级用法,可以类比为计算属性,具有getter和setter。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅谈vue3中effect与computed的亲密关系 - Python技术站

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

相关文章

  • vue使用echarts图表的详细方法

    当我们需要在Vue项目中使用Echarts图表时,需要进行以下步骤: 安装echarts和vue-echarts 使用npm或yarn安装: npm install echarts vue-echarts yarn add echarts vue-echarts 在Vue项目中引入echarts和vue-echarts 在需要使用Echarts图表的Vue组…

    Vue 2023年5月29日
    00
  • axios请求二次封装之避免重复发送请求

    让我给你详细讲解“axios请求二次封装之避免重复发送请求”的完整攻略。 在前端开发中,我们经常使用axios这个库来进行http请求,但是如果在某个操作频繁执行时,如果频繁发送多次相同的请求,会浪费网络资源和服务器资源,可能还会造成意外的程序错误。因此,在使用axios时,我们需要进行请求二次封装,避免重复发送请求。 以下是实现这个目标的步骤: 1. 安装…

    Vue 2023年5月28日
    00
  • Vue组件与生命周期详细讲解

    Vue组件与生命周期详细讲解 Vue.js是一款轻量级MVVM框架,由于其简洁易上手的特性,越来越多的开发者开始关注和使用它。Vue.js组件与生命周期是Vue.js开发中的重要概念,本文将对其进行详细讲解。 Vue组件 Vue组件是Vue.js中一个独立的模块,它可以封装HTML、CSS代码和JavaScript代码,用来实现某一个特定的功能。Vue组件的…

    Vue 2023年5月29日
    00
  • 详解vue中$nextTick和$forceUpdate的用法

    详解vue中$nextTick和$forceUpdate的用法 1. $nextTick的用法 1.1 作用 $nextTick是Vue中提供的异步方法,用于在下次DOM更新循环结束之后执行延迟回调,在修改数据之后立即使用这个方法,可以获取更新后的DOM。 示例代码: <template> <div> <h2>{{ mes…

    Vue 2023年5月29日
    00
  • Vue.js使用axios动态获取response里的data数据操作

    使用Vue.js配合axios获取response中的data数据的步骤如下: 安装axios npm install axios 在Vue.js中引入axios import axios from ‘axios’ 使用axios发送请求并在promise中获取数据 axios.get(‘/api/user/1’).then(response => {…

    Vue 2023年5月28日
    00
  • Vue3中vuex的基本使用方法实例

    本文将以「Vue3中vuex的基本使用方法实例」为主题,为大家详细讲解Vue3中vuex的使用方法和操作流程。 先决条件 Vue3和Vuex是本文所需使用的前置知识,如果你还不熟悉这两个技术,你需要先掌握它们。 安装 Vuex 首先,我们需要安装 Vuex 。您可以通过运行以下命令来安装该软件包: npm install vuex@next 创建 Vuex …

    Vue 2023年5月27日
    00
  • Vue中localStorage的用法和监听localStorage值的变化

    关于Vue中localStorage的用法和监听localStorage值的变化,以下是完整内容: 1. Vue中localStorage的用法 LocalStorage是浏览器提供的一种本地存储方式,数据可以永久的保存在浏览器本地,下次访问此网页还能取回数据。使用localStorage需要使用到原生的JavaScript语法。在 Vue 中使用 loca…

    Vue 2023年5月28日
    00
  • vue-cli项目如何使用vue-resource获取本地的json数据(模拟服务端返回数据)

    下面是“vue-cli项目如何使用vue-resource获取本地的json数据(模拟服务端返回数据)”的完整攻略。 准备工作 确认本地已具备Node.js和Vue-cli环境。 在Vue-cli环境中新建一个Vue项目。 安装vue-resource 在Vue项目目录下使用命令行工具,输入以下命令进行安装: npm install vue-resource…

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