vue 3 中watch 和watchEffect 的新用法

下面我就来讲解 "Vue 3 中 watch 和 watchEffect 的新用法" 的完整攻略。

1. 简介

在Vue 3中,watch 和 watchEffect 的用法得到了很大的改进。 在Vue 2中,watch 选项和 watch 函数要么立即执行要么需要手动设置 immediate 选项才能立即执行。如果你只是需要在数据变化时立即执行一段代码,那么Vue3中的 watchEffect 就可以胜任了;watchEffect 可以自动追踪依赖,并且只在依赖变化时执行代码。下面就对这两种新用法做详细的解释。

2. watchEffect

2.1 定义

watchEffect 会自动追踪依赖,并在其中任何一个依赖项改变时重新运行该函数。 这个 API 在一般情况下与 computed 很相似,但是它只接受一个函数作为其唯一的参数。它实际上是在内部执行了一个effect,代表一个可响应计算属性,任何 effect 的返回值都会自动成为它的返回值输出。

2.2 示例

例如,有以下的代码:

import { watchEffect, reactive } from 'vue'

const state = reactive({
  count: 0,
  doubleCount: 0
})

watchEffect(() => {
  state.doubleCount = state.count * 2
})

console.log(state.doubleCount) // output: 0

state.count ++

console.log(state.doubleCount) // output: 2

以上代码中,我们定义了一个 state 对象,其中包含两个属性 count 和 doubleCount,count 的变化会影响到 doubleCount。我们使用 watchEffect 监听 state 对象上属性 count 的变化,并使用其更新另一个属性 doubleCount,最后在控制台输出了 state.doubleCount 的值。我们可以看到,当 state.count 的值从0变为1时,state.doubleCount 的值也相应地从0变为了2。

3. watch

3.1 定义

在 Vue 3 中, watch 选项可以接受一个纯函数或一个函数体,用来监听被观察属性的变化并执行一些副作用。watch会在创建时执行第一次,而类似于 Vue2 中手动添加的 immediate 选项,watch 可以接受一个 immediate 选项以立即执行一次函数并进入这个函数后的侦听模式。除了 immediate 选项外,watch 还包含了一些其他的选项来改变它的行为。

3.2 示例

import { watch, reactive } from 'vue'

const state = reactive({
  count: 0,
  doubleCount: 0
})

watch(() => state.count, (newValue, oldValue) => {
  state.doubleCount = newValue * 2
})

console.log(state.doubleCount) // output: 0

state.count ++

console.log(state.doubleCount) // output: 2

以上代码中,我们同样使用了一个 state 对象,其中包含了两个属性 count 和 doubleCount。我们使用 watch 监听 count 的变化,并在回调函数中更新 doubleCount,最后还是输出了 doubleCount。可以发现,和 watchEffect 一样,另一个属性 doubleCount 已经被正确的计算出来了。

4. 总结

Vue 3 提供了更灵活、更简单的 watch 和 watchEffect 的新用法。将组件与数据更好的进行分离,使得开发更简易化。watchEffect 更方便,如果只是需要在数据变化时立即执行一段代码就可以使用,而 watch 可以更灵活地监听多个数据,并缩小监听范围,仅在所需要的情况下执行回调函数。这为我们开发私人定制提供了更多的实现方式。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue 3 中watch 和watchEffect 的新用法 - Python技术站

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

相关文章

  • Vue路由模块化配置的完整步骤

    当使用Vue.js开发单页面应用程序时,路由管理通常是必不可少的功能之一。Vue Router是Vue.js官方提供的路由管理器,它可以轻松地集成到Vue.js应用中,并且在开发过程中为我们提供了许多有用的功能。 Vue Router支持模块化配置,我们可以将路由配置拆分为多个独立的模块,以便更好地组织和管理我们的代码。下面是Vue路由模块化配置的完整步骤:…

    Vue 2023年5月28日
    00
  • 详解Vue组件之作用域插槽

    当我们使用Vue构建前端应用时,尤其是当我们需要扩展组件功能时,Vue组件是不可避免的。Vue的组件化系统使用了所谓的作用域插槽(scope slots)以让组件的扩展更加灵活和强大。在本文中,我们将会讨论Vue的作用域插槽。 什么是作用域插槽? 作用域插槽是Vue组件中最强大的特性之一,它让父组件可以在子组件的视图中插入内容,并访问子组件的内部数据。尤其是…

    Vue 2023年5月27日
    00
  • Vue实现点击按钮下载文件的操作代码(后端Java)

    下面是详细讲解“Vue实现点击按钮下载文件的操作代码(后端Java)”的完整攻略: 1. 前端实现 1.1 创建下载按钮 首先,在Vue的组件中添加一个按钮,用来触发下载操作: <template> <div> <button @click="downloadFile">下载文件</button&…

    Vue 2023年5月28日
    00
  • 带你理解vue中的v-bind

    当使用 Vue.js 开发页面时,我们常常需要给 HTML 元素动态绑定属性或者是事件,这个时候就需要使用到 v-bind 指令。v-bind 可以用来动态绑定 HTML 属性,甚至是自定义属性。 使用方法 v-bind 指令可以缩写成简洁的冒号绑定形式。使用方法如下: <template> <div> <!– 完整语法 –…

    Vue 2023年5月28日
    00
  • vue使用websocket概念及示例

    要理解Vue.js如何使用Websocket,我们需要先了解什么是Websocket。Websocket是一种实现全双工通信的协议,它允许浏览器和服务器之间实时通信,而不需要完全依靠HTTP请求响应模式。 接下来,我们将为您介绍如何在Vue.js应用程序中使用Websocket。 步骤1:安装和导入WebSocket应用程序 首先,我们需要安装Websock…

    Vue 2023年5月27日
    00
  • vue-cli脚手架的.babelrc文件用法说明

    Vue-cli是Vue.js官方提供的一个脚手架工具,可以快速构建Vue.js项目的基础结构。其中包含一个 .babelrc 文件,用于配置Babel转码器的参数。本篇攻略将详细讲解 .babelrc 文件的用法说明。 .babelrc文件用法说明 一、什么是babel Babel 是一个 JavaScript 编译器,主要解决的问题是:JavaScript…

    Vue 2023年5月28日
    00
  • vue代码分割的实现(codesplit)

    Vue.js 是一款流行的构建用户界面的 JavaScript 框架。它具有优雅的 API 设计、高效的渲染和灵活的数据绑定,目前已经成为了不少前端工程师喜欢的框架之一。其中,Vue 中的代码分割是进行性能优化时经常用到的一个关键概念。 代码分割能够将你的代码库划分为更小的块单元,以便实现懒加载 (lazy-loading) 和按需加载 (on-demand…

    Vue 2023年5月29日
    00
  • Vue路由传递参数与重定向的使用方法总结

    下面是详细讲解“Vue路由传递参数与重定向的使用方法总结”的完整攻略。 一、路由传递参数 1. 通过动态路由传递参数 动态路由是指路由路径中包含参数的路由,例如: const routes = [ { path: ‘/user/:id’, component: User } ] 使用 Vue Router 提供的 $router.params 来获取参数。在…

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