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

yizhihongxing

浅谈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 + Webpack + Vue-loader学习教程之相关配置篇

    关于“Vue + Webpack + Vue-loader学习教程之相关配置篇”的完整攻略,我们需要从以下几个方面来讲解。 1. 安装Webpack 首先,在开始之前我们需要安装Webpack,可以在终端中输入以下命令进行安装: npm install –save-dev webpack 2. 安装Vue.js和Vue-loader 接下来,我们需要安装V…

    Vue 2023年5月28日
    00
  • 浅谈vue.js中v-for循环渲染

    浅谈vue.js中v-for循环渲染的完整攻略如下: 概述 Vue.js是一款流行的JavaScript框架,提供了许多方便的功能以帮助开发人员构建交互式Web应用程序。其中一个很有用的功能是v-for指令,可以在Vue.js中循环渲染列表数据。 利用v-for渲染列表 在Vue.js中,使用v-for指令可以循环渲染数据,语法如下: <ul> …

    Vue 2023年5月27日
    00
  • 使用Vue开发自己的Chrome扩展程序过程详解

    使用Vue开发自己的Chrome扩展程序 开发Chrome扩展程序可以用于个性化配置Chrome浏览器功能,同时也是Chrome浏览器生态中非常重要的一部分。本篇文章将会向你详细讲解如何使用Vue开发自己的Chrome扩展程序。 准备工作 首先,需要安装最新版的Node.js和 Vue CLI工具。安装完成后,使用以下命令创建一个基于 Vue 的 Chrom…

    Vue 2023年5月27日
    00
  • vue编写的功能强大的swagger-ui页面及使用方式

    什么是Swagger-UI页面? Swagger UI是一个通过注解的方式为 RESTful API 描述文档生成在线文档界面的工具。通过Swagger UI,我们可以详细地查看到API接口的信息,包括接口名称、接口描述、请求地址、请求方式、参数类型、参数描述、响应状态码等等。Swagger UI可以很方便地帮助我们对API接口进行测试与调试。 如何使用Vu…

    Vue 2023年5月28日
    00
  • 浅谈Vue.nextTick 的实现方法

    当数据发生变化后,Vue 不会立即更新 DOM,而是加入一个更新队列,并在下一次事件循环中更新视图。而 Vue.nextTick 可以在下次 DOM 更新循环结束之后执行回调。这使得我们可以在 DOM 变化后立即操作更新后的 DOM,例如获取更新后的元素宽高等。 一、Vue.nextTick 的调用方式 Vue 提供了两种调用方式: 1.1 全局调用方式 V…

    Vue 2023年5月29日
    00
  • vue深拷贝的3种实现方式小结

    本文将详细讲解三种vue深拷贝的实现方式,分别为递归实现、JSON.parse/stringify、lodash库实现。下面将分为以下几个部分来介绍。 1. 递归实现 递归实现是一种最简单的深拷贝方式,其代码实现如下: function deepClone(obj) { if (obj === null || typeof obj !== "obj…

    Vue 2023年5月27日
    00
  • vue.js的简单自动求和计算实例

    下面为大家讲解一下“Vue.js的简单自动求和计算实例”的完整攻略。 思路概述 首先,我们需要使用 Vue.js 组件化的思想,将输入框和显示框拆分成独立的组件,这样方便我们进行状态管理和更新视图。 其次,我们需要监听输入框的值变化,并对输入的数据进行求和计算,最后将结果显示在显示框中。 示例说明一 下面我们通过一个实例进一步说明上述思路: 在 HTML 中…

    Vue 2023年5月28日
    00
  • 一起来学习Vue的组件间通信方式

    一起来学习Vue的组件间通信方式 在Vue开发中,组件是进行页面构建的基本单元。不同的组件之间经常需要进行通信,以达到共同完成某个任务的目的。本文将详细讲解Vue的组件间通信方式。 props 和 $emit Vue的组件实例只能向下传递数据。也就是说,顶层组件可以将数据传递到其子组件,子组件可以将数据传递到孙子组件,而孙子组件则不能直接向其父组件传递数据。…

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