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

yizhihongxing

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日

相关文章

  • IntelliJ IDEA 安装vue开发插件的方法

    以下是详细的IntelliJ IDEA 安装vue开发插件的方法: 方法一:通过IDEA插件市场安装 打开 Intellij IDEA,选择 File -> Setting -> Plugins; 在插件市场中搜索Vue.js插件(Vue.js、Vue.js Snippets、Vue.js Style),点击Install安装; 安装完成后,重启…

    Vue 2023年5月27日
    00
  • vue与vue-i18n结合实现后台数据的多语言切换方法

    下面是“vue与vue-i18n结合实现后台数据的多语言切换方法”的完整攻略: 1. 安装和配置vue-i18n 首先需要在项目中安装和配置vue-i18n,安装命令为: npm install vue-i18n –save 然后在main.js中引入vue-i18n并进行配置: import Vue from ‘vue’ import App from …

    Vue 2023年5月28日
    00
  • vue-cli3搭建项目的详细步骤

    下面是vue-cli3搭建项目的详细步骤攻略: 步骤一:安装vue-cli3 在命令行中输入以下命令安装 vue-cli3: npm install -g @vue/cli 这里使用了 npm 工具来安装 @vue/cli 包,该工具是 Node.js 官方提供的安装包管理工具。 步骤二:创建新项目 在命令行中输入以下命令来创建新的 Vue 项目: vue …

    Vue 2023年5月27日
    00
  • Vue3和Electron实现桌面端应用详解

    “Vue3和Electron实现桌面端应用详解”可以拆分为两部分进行讲解,即Vue3和Electron的介绍与实现 Vue3介绍与实现 Vue3介绍 Vue3是Vue.js的最新版本,相较于Vue.js 2,Vue3做了大量的重构和优化。其中,重构和优化最显著的一个方面是Vue3的核心代码由Monorepo改为了Tree-Shaking优化的方式,使得应用的…

    Vue 2023年5月27日
    00
  • vue实现在线预览pdf文件和下载(pdf.js)

    首先,我们需要明确一下,在线预览和下载PDF文件需要借助于开源的PDF.js库。这个库是Mozilla基金会开发的,可以在Web上直接呈现PDF文档。 接下来,我们将学习如何使用Vue.js和PDF.js库,实现在线预览和下载PDF文件的功能。 步骤一:安装依赖 我们首先需要在Vue项目中安装pdf.js库。 在命令行输入: npm install pdfj…

    Vue 2023年5月28日
    00
  • Vue读取本地静态文件json的2种方法以及优缺点

    下面是详细的攻略。 Vue如何读取本地静态文件json 在Vue中,我们可以使用以下两种方法读取本地静态文件json。 方法一:使用Ajax来读取本地静态文件json 第一种方法是使用Ajax进行读取,在Vue中可以通过axios库来实现Ajax请求。将本地静态文件JSON作为静态资源放在static文件夹下: |– src | |– App.vue |…

    Vue 2023年5月28日
    00
  • Vue from-validate 表单验证的示例代码

    下面是Vue表单验证的示例代码攻略。 1. 安装依赖和引入相关组件 首先需要安装依赖包,包括vee-validate和vue-i18n等。这里以npm为例,执行以下命令: npm install vee-validate@next vue-i18n 然后在Vue项目入口文件中引入依赖: import { createApp } from ‘vue’; imp…

    Vue 2023年5月28日
    00
  • vue中SPA单页面应用程序详解

    Vue中SPA单页面应用程序详解 什么是SPA单页面应用程序 SPA全称Single Page Application,意为单页面应用程序。它是一种特殊的网页应用程序,其特点是整个网站只有一个HTML页面,但在页面加载后,所有的页面操作都在该页面上进行,通过Ajax技术实现页面的局部刷新,最终实现不刷新页面的情况下,达到与传统多页面网站相同的用户体验。 Vu…

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