Vue3系列之effect和ReactiveEffect track trigger源码解析

Vue3系列之effect和ReactiveEffect track trigger源码解析

什么是effect

effect 是 Vue3 中新增的一个 API,它的作用是创建一个「响应式副作用」函数。可以把它看作一个自包含的响应式系统,它能够跟踪封装起来的响应式数据,并在数据变化时进行相关操作。

ReactiveEffect 与 track

ReactiveEffect 类是 effect 创建出的对象的构造函数。

它的作用就是在响应式数据被读取时,将当前响应式函数与当前响应式数据记录下来,以便在数据变化时,触发响应式函数重新运行。

track 函数的作用就是将依赖当前读取的响应式数据的响应式函数和响应式数据关联起来。

trigger 函数

trigger 函数的作用是触发「响应式副作用」进行更新。

当响应式数据发生变化时,trigger 函数会重新运行该响应式数据所关联的所有响应式函数,并对比原来记录的依赖信息,来决定是否需要重新运行对应的响应式函数。

示例如下

示例 1

import { reactive, effect } from 'vue'

const state = reactive({
    counter: 0
})

const myEffect = effect(() => {
  console.log(`counter: ${state.counter}`)
})

setInterval(() => state.counter++, 1000)

这个例子中,我们创建了一个响应式数据 state, 并用 effect 函数创建一个响应式函数 myEffect,用来记录 state.counter 的读取过程。

另外每秒钟会将 state.counter 的值加一,从而触发 myEffect 函数的执行,输出 counter: x

示例 2

import { reactive, effect } from 'vue'

const state = reactive({
  counter: 0
})

const myEffect = effect(() => {
  console.log(`counter: ${state.counter}`)
})

effect(() => {
  if (state.counter > 5) {
    console.log('counter > 5, stop myEffect')
    myEffect.stop()
  }
})

setInterval(() => state.counter++, 1000)

这个例子中,和第一个例子相同,我们创建了一个响应式数据 state 和一个响应式函数 myEffect

然而不同的是我们新增加了另一个响应式函数用于判断 state.counter 是否大于 5。若超过 5,就停止运行 myEffect 函数。

从中我们可以看到 effect 函数的依赖关系。

总结

综上所述,了解 effectReactiveEffecttracktrigger 的含义,对于我们理解 Vue3 的响应式系统有很大帮助。

当我们在开发 Vue3 的应用时,可以利用 effect 函数生成响应式函数并关联到特定响应式数据上,从而实现快速进行业务逻辑编写,实现响应式效果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue3系列之effect和ReactiveEffect track trigger源码解析 - Python技术站

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

相关文章

  • elmentUI组件中el-date-picker限制时间范围精确到小时的方法

    下面是关于「elmentUI组件中el-date-picker限制时间范围精确到小时的方法」的详细讲解,包含了两条示例说明。 简介 el-date-picker 是 Element UI 提供的日期选择器组件,它可以帮助我们快速地构建出日期选择器。但是在实际使用中我们可能会遇到一些特殊需求,比如需要限制选取日期时间的范围,并且要精确到小时级别。本文将介绍在 …

    Vue 2023年5月29日
    00
  • Vue echarts模拟后端数据流程详解

    下面是详细讲解 “Vue echarts模拟后端数据流程详解”的完整攻略,包含以下步骤: 1. 安装相关依赖 要使用Vue和echarts,首先需要安装Vue和echarts的相关依赖。使用npm安装如下: npm install –save vue npm install –save echarts 2. 在Vue中引入echarts 为了在Vue中使…

    Vue 2023年5月28日
    00
  • vue+ESLint 配置保存 自动格式化代码

    这里为您详细讲解基于vue和ESLint开发的代码格式化和保存配置攻略,并提供两个使用示例。 1. 安装插件和配置ESLint 首先,我们需要在项目中安装vue-cli-plugin-eslint插件,可以使用如下命令进行安装: vue add eslint 接下来,在项目根目录中的.eslintrc.js文件中配置ESLint的规则,比如我们可以使用标准的…

    Vue 2023年5月27日
    00
  • nuxt.js写项目时增加错误提示页面操作

    下面我将详细讲解如何在 Nuxt.js 项目中增加错误提示页面操作的完整攻略。 增加错误提示页面操作的步骤 安装 @nuxtjs/toast 插件。 bash npm install –save @nuxtjs/toast 注:@nuxtjs/toast 是一个消息提示插件,能够在页面中动态显示成功或错误的提示消息。 在 nuxt.config.js 文件…

    Vue 2023年5月28日
    00
  • vue v-for 点击当前行,获取当前行数据及event当前事件对象的操作

    要实现”vue v-for 点击当前行,获取当前行数据及 event 当前事件对象”的需求,主要分为两个步骤: 使用 v-for 渲染数据列表,绑定点击事件,处理点击事件传递参数。 通过点击事件获取当前行数据及事件对象。 下面是详细的攻略: 1. 使用 v-for 渲染列表,绑定点击事件处理参数传递 在 Vue 中使用 v-for 渲染列表非常常见。要获取当…

    Vue 2023年5月28日
    00
  • Vue3将虚拟节点渲染到网页初次渲染详解

    Vue3将虚拟节点渲染到网页初次渲染详解 在Vue3中,将虚拟节点渲染到网页上,是在createApp的过程中完成的。具体的过程如下: 创建Vue实例 我们可以使用createApp方法创建Vue实例,如下: const app = Vue.createApp({ // Options }) createApp方法中的参数可以传入一个普通的JavaScrip…

    Vue 2023年5月28日
    00
  • Vue中的局部组件介绍

    当我们在开发Vue应用程序时,我们通常需要将页面简化成多个模块化的组件。这个时候,我们可以使用Vue的局部组件来实现这个目的。Vue的局部组件是一种允许我们在单个Vue组件中注册私有的子组件的机制。在这个过程中,我们可以将一个Vue组件分解成多个小组件,并将这些组件放置在同一个父组件中,以更好地管理和重复使用这些组件。 如何在Vue中实现局部组件 在Vue中…

    Vue 2023年5月27日
    00
  • 详解vue中使用express+fetch获取本地json文件

    下面就详细讲解如何在vue中使用express+fetch获取本地json文件的完整攻略。 简介 Vue.js是一款极易上手的渐进式JavaScript框架,而Express是一款基于Node.js的快速、灵活的Web应用开发框架。在vue中使用express+fetch获取本地json文件,可以极大地方便我们的前端开发工作,特别是在开发中使用到模拟数据以及…

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