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日

相关文章

  • 为什么推荐使用JSX开发Vue3

    为什么推荐使用JSX开发Vue3 在Vue3中,JSX是一种新的语法格式,用于代替Vue2中的template标签。它允许将组件结构与JavaScript语法相结合,并提供更好的类型检查和编辑器支持。以下是推荐使用JSX开发Vue3的原因: 1.更直观易懂:JSX语法格式更加接近JavaScript语言本身,比Vue2中的template标签更直观易懂。使用…

    Vue 2023年5月27日
    00
  • 一篇文章学会Vue中间件管道

    下面是一份关于“一篇文章学会Vue中间件管道”的完整攻略: 什么是Vue中间件管道 Vue中间件管道是一种机制,它允许您在路由导航前或后执行自定义代码。您可以使用它来验证用户的身份、获取数据、在加载组件之前异步加载其他资源等。中间件是Vue的一个核心特性,因为它可以帮助您实现许多常见的需求。 如何在Vue中使用中间件管道 步骤一:创建中间件 在Vue中,创建…

    Vue 2023年5月28日
    00
  • 详解vue 路由跳转四种方式 (带参数)

    详解vue 路由跳转四种方式 (带参数) 在vue中,路由跳转是非常常见的操作,我们可以使用vue-router提供的四种方式进行路由跳转。本文将详细讲解这四种方式,并提供带参数的示例。 1. router.push 使用router.push可以向路由添加一个新的历史记录,这意味着用户可以使用浏览器的后退按钮回到之前的页面。这种方式常用于页面跳转或者在当前…

    Vue 2023年5月28日
    00
  • 学习笔记编写vue的第一个程序

    学习笔记编写vue的第一个程序的完整攻略如下: 1. 前置条件 开始编写Vue的第一个程序,需要确保已经安装好了以下开发环境: Node.js:JavaScript 的运行环境 npm:Node.js 的包管理器 Vue CLI:Vue 的命令行工具 如果还没有安装,可以先参考 Vue官网 进行安装。 2. 创建项目 使用 Vue CLI 创建一个新项目,可…

    Vue 2023年5月27日
    00
  • 浅谈Vue SSR中的Bundle的具有使用

    Vue SSR中的Bundle是指打包包含服务端和客户端代码的文件,在服务器端生成HTML时将其注入页面中并携带客户端代码。这样做的好处在于针对不同的用户使用不同的请求路径,服务端就可以通过Bundle调用不同的组件,从而生成相应的HTML页面,提升页面的渲染速度和用户体验。 具体步骤如下: 1. 安装依赖 npm install –save vue vu…

    Vue 2023年5月28日
    00
  • 98道经典Vue面试题总结

    感谢您对本网站的关注,以下是关于《98道经典Vue面试题总结》的完整攻略。 一、前言 Vue.js 是一款流行的前端框架,已经成为很多企业和公司的项目必备技术。但是随着 Vue 的普及,Vue 面试题也越来越多,Vue 面试有可能会考到一些比较深入的知识点。因此,对于很多初学者来说,学习 Vue 的同时,也要去了解一些常见的面试题。 本篇文档涵盖了98道面试…

    Vue 2023年5月28日
    00
  • Vue CLI4 Vue.config.js标准配置(最全注释)

    下面是详细讲解“Vue CLI4 Vue.config.js标准配置(最全注释)”的完整攻略。 什么是Vue CLI4? Vue CLI是Vue.js官方提供的一个“脚手架”工具,它可以帮助我们快速构建Vue.js项目的基础代码结构。 Vue CLI4是Vue CLI的一个全新版本,它提供了更加简单、灵活、功能更加强大的CLI工具,使得我们可以更加方便地使用…

    Vue 2023年5月28日
    00
  • Vue3中SetUp函数的参数props、context详解

    下面就为您详细讲解“Vue3中SetUp函数的参数props、context详解”的完整攻略。 什么是SetUp函数 SetUp函数是Vue3中的新特性,是用来替代Vue2.x中的 data和methods等相关选项的。在SetUp函数中,我们可以定义组件的状态和行为。如下是一个SetUp函数的示例: import { reactive } from ‘vu…

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