vue 3 中watch 和watchEffect 的新用法

yizhihongxing

下面我就来讲解 "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.Js中的$watch()方法总结

    首先,我们需要了解$watch()方法是什么以及它的作用。$watch()是Vue.js中一个重要的观察者模式,在Vue.js中可以通过$watch()方法来监视某个数据对象的变化,一旦发生变化就执行回调函数。下面详细介绍它的用法。 监听对象watch 简单的例子 我们可以通过如下代码创建一个简单的对象,并监听其中一个属性: var data = {mess…

    Vue 2023年5月29日
    00
  • JSP上传图片产生 java.io.IOException: Stream closed异常解决方法

    问题描述: 在使用 JSP 实现文件上传功能时,有时会出现 java.io.IOException: Stream closed 异常,这是因为在使用表单上传文件时,文件流对象在上传完之后必须要关闭,若流被关闭后仍然继续写入文件流会发生流关闭异常。 解决方案: 将文件流转换为字节数组并缓存 在上传大型文件时,为了避免 OutOfMemoryError 异常,…

    Vue 2023年5月28日
    00
  • Vue计算属性与监视属性详细分析使用

    Vue.js是一个非常流行的JavaScript前端框架,其中计算属性和监视属性是Vue.js中的两个重要概念。它们都被用来监听数据的变化,但是它们有着不同的用途和适用场景。 一、 Vue计算属性 Vue计算属性是指根据现有的属性计算得出的另一属性,即Vue.js中的“computed”。Vue计算属性可以非常方便地进行数据处理和关联操作,并且具有缓存功能,…

    Vue 2023年5月28日
    00
  • vue中的虚拟dom知识点总结

    下面是关于“Vue中的虚拟DOM知识点总结”的完整攻略: 什么是虚拟DOM 虚拟DOM是一种通过JS对象描述DOM树结构,实现DOM树的高效更新的技术。Vue中也是采用虚拟DOM来实现数据驱动视图的,Vue会通过模板生成虚拟DOM树,当数据发生变化时,Vue会根据新的数据生成新的虚拟DOM树,并通过Diff算法对比新旧虚拟DOM树的差异,最终最小化DOM操作…

    Vue 2023年5月28日
    00
  • Vue组件通信传递数据的三种方式

    在Vue组件通信中,常常需要进行数据传递,Vue提供了三种方式:props、$emit、$on/$once。 1. props props是父组件向子组件传递数据的一种方式,可以传递任何类型的数据。 父组件定义: <template> <child :title="title" :list="list&quot…

    Vue 2023年5月28日
    00
  • mqtt.js 无法连接/错误提示 WebSocket connection to ‘ws://xxxxx‘ failed:的解决方法

    首先,需要了解一下MQTT协议和mqtt.js库。MQTT是一种用于物联网的轻量级协议,基于发布/订阅模式,支持良好的可靠性和低带宽消耗。而mqtt.js是MQTT协议的JavaScript客户端库,可以用于浏览器和Node.js环境下。 当在使用mqtt.js连接MQTT服务器时,出现“WebSocket connection to ‘ws://xxxxx…

    Vue 2023年5月28日
    00
  • vue中如何给静态资源增加路由前缀

    在 Vue 中,我们通常将静态资源放在 public 目录下,这些静态资源可以是样式表、脚本、图片、字体等文件。在访问这些静态资源时,我们可以给它们增加路由前缀,以便更好地管理和部署我们的应用程序。 一种实现方式是通过修改 vue.config.js 文件,该文件是 Vue CLI 3.x 新增的配置文件,用于存放项目构建配置。我们可以在 publicPat…

    Vue 2023年5月28日
    00
  • VUE异步更新DOM – 用$nextTick解决DOM视图的问题

    VUE是一个流行的JavaScript框架,具有数据驱动和组件化的特点。然而,当我们在处理DOM视图时,有时候可能会出现异步更新的问题。这会导致我们的DOM视图没有及时更新,从而导致一些错误。在这种情况下,我们可以使用Vue提供的$nextTick方法来解决DOM视图异步更新的问题。 什么是异步更新DOM 在Vue中,组件的DOM操作是异步执行的。这意味着当…

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