浅析vue3响应式数据与watch属性

浅析Vue3响应式数据与watch属性

什么是Vue3响应式数据?

在 Vue3 中,响应式数据是通过函数 reactive() 创建的一个响应式对象,它通过 Proxy 对象来监听对象的变化,使得当对象发生改变时,视图会自动更新。我们可以通过下面的代码来创建一个响应式对象:

import { reactive } from 'vue'

const state = reactive({
  message: 'Hello Vue3'
})

在上面的代码中,我们通过 reactive() 函数创建了一个响应式对象 state,它有一个属性 message,初始值为 Hello Vue3

如何使用watch属性

在 Vue3 中,我们可以通过 watch 函数来监听一个数据的变化,从而做出相应的响应。

我们可以通过 watch 函数来监听 reactive 对象的变化:

import { watch } from 'vue'

// 监听 state 对象的 message 属性
watch(() => state.message, (newValue, oldValue) => {
  console.log(`new value: ${newValue}, old value: ${oldValue}`)
})

在上面的代码中,我们使用了 watch 函数来监听 state.message 属性的变化,当 state.message 发生改变时,会执行回调函数,并输出新旧值。

除了监听简单类型数据的变化之外,我们也可以监听对象的变化。

const obj = reactive({
  name: 'Jack',
  age: 25,
  address: {
    city: 'New York',
    street: 'Broadway'
  }
})

watch(() => obj, (newValue, oldValue) => {
  console.log('obj changed:', newValue, oldValue)
}, { deep: true })

obj.address.city = 'San Francisco'

在上面的代码中,我们在 watch 函数中监听 obj 对象的变化,并设置 deep 选项为 true,表示监听对象的深层变化。当 obj.address.city 属性改变时,会执行回调函数,并输出 obj 对象的新旧值。

示例说明

示例1:监听响应式对象的变化

在下面的示例中,我们通过 reactive() 函数创建一个响应式对象 state,它有一个属性 message,初始值为 Hello Vue3,我们通过 watch 函数来监听 state.message 的变化。

<template>
  <div>
    <p>{{ state.message }}</p>
    <button @click="changeMessage">Change Message</button>
  </div>
</template>

<script>
import { reactive, watch } from 'vue'

export default {
  setup() {
    const state = reactive({
      message: 'Hello Vue3'
    })

    watch(() => state.message, (newValue, oldValue) => {
      console.log(`new value: ${newValue}, old value: ${oldValue}`)
    })

    function changeMessage() {
      state.message = 'Hello World'
    }

    return {
      state,
      changeMessage
    }
  }
}
</script>

在上面的代码中,我们在 watch 回调函数中输出了 state.message 的新旧值,在页面上我们展示了 state.message 的值,并且有一个 Change Message 按钮,当我们点击该按钮时,会改变 state.message 的值。

示例2:监听对象的深层变化

在下面的示例中,我们通过 reactive() 函数创建一个包含嵌套对象的响应式对象 person,通过点击按钮来修改它的深层属性值:

<template>
  <div>
    <p>Name: {{ person.name }}</p>
    <p>Age: {{ person.age }}</p>
    <p>City: {{ person.address.city }}</p>
    <button @click="changeCity">Change City</button>
  </div>
</template>

<script>
import { reactive, watch } from 'vue'

export default {
  setup() {
    const person = reactive({
      name: 'Jack',
      age: 25,
      address: {
        city: 'New York',
        street: 'Broadway'
      }
    })

    watch(() => person, (newValue, oldValue) => {
      console.log('person changed:', newValue, oldValue)
    }, { deep: true })

    function changeCity() {
      person.address.city = 'San Francisco'
    }

    return {
      person,
      changeCity
    }
  }
}
</script>

在上面的代码中,我们在 watch 回调函数中输出了 person 对象的新旧值,在页面上我们展示了 person 对象的属性,并且有一个 Change City 按钮,当我们点击该按钮时,会改变 person.address.city 的值,从而触发 watch 函数的回调函数。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅析vue3响应式数据与watch属性 - Python技术站

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

相关文章

  • vue3中的watch和watchEffect实例详解

    Vue3中的watch和watchEffect实例详解 在Vue3中,watch和watchEffect可以定义响应式数据的副作用。本文会详细讲解两者的区别和使用方式,并给出几个实例示例说明。 watch watch的基本用法是:当数据发生变化时执行一个函数。可以用来监听单个数据的变化,也可以监听多个数据。 监听单个数据 监听单个数据可以通过$watch函数…

    Vue 2023年5月27日
    00
  • Vue.js实现表格渲染的方法

    这里我提供一份Vue.js实现表格渲染的攻略。 1. 使用Vue.js中的v-for指令 Vue.js中的v-for指令可以循环遍历数组或对象,将其转换为模板的列表项或表格行。我们可以使用这个指令来渲染表格的行和列。 以下是一个基本的示例: <table> <thead> <tr> <th>ID </th…

    Vue 2023年5月29日
    00
  • Vue.js 中的 $watch使用方法

    Vue.js是一款流行的前端框架,提供了丰富的数据绑定和更新机制。其中,$watch是Vue.js提供的一个非常有用的功能,它可以用来监听对象的变化并进行响应,可以应用于各种场景。下面就详细介绍一下Vue.js中的$watch使用方法。 Vue.js中的$watch使用方法 基础语法 在Vue.js中,我们可以使用vm.$watch来创建$watch实例,并…

    Vue 2023年5月29日
    00
  • vue自定义指令实现仅支持输入数字和浮点型的示例

    让我们开始讲解Vue自定义指令实现仅支持输入数字和浮点型的攻略。 简介 Vue.js是一个渐进式的JavaScript框架,通过指令和组件来扩展HTML。Vue自定义指令是一种自定义的指令,它扩展了现有的浏览器DOM元素的行为。本次攻略将介绍如何使用Vue自定义指令实现仅支持输入数字和浮点型。 实现方式 Vue自定义指令可以通过Vue.directive()…

    Vue 2023年5月27日
    00
  • vue2之vue.config.js最全配置教程

    下面就详细讲解一下 “vue2之vue.config.js最全配置教程”的完整攻略。 简介 vue.config.js 是 Vue CLI 3.x 中一个重要的配置文件,用于对项目进行全局的配置。这个文件不存在,需要手动创建,与 package.json 文件同级。通过 vue.config.js 文件的配置,我们可以实现很多高级功能,例如 Webpack …

    Vue 2023年5月27日
    00
  • Vue2实现组件props双向绑定

    下面我将详细讲解如何在Vue2中实现组件props的双向绑定。 1. Vue2中props的单向绑定 Vue2中的props是单向绑定的,即父组件可以向子组件传递数据,但是子组件不能直接修改父组件传递的props。在子组件中默认情况下只能读取父组件传递的props值,如果想要修改这些值,需要通过事件的形式在子组件中触发父组件传递的方法来实现。 下面是一个示例…

    Vue 2023年5月28日
    00
  • 如何解决.vue文件url引用文件的问题

    当我们在Vue项目中使用Vue组件时,可能会遇到引用.vue文件中的资源文件的问题,如图片、css和js等文件,常见的错误会在浏览器控制台输出404错误,即找不到该文件。 要解决这个问题,可以按照以下步骤操作: 1. 使用相对路径引用 在.vue文件中引用图片、css和js文件时,应使用相对路径来引用,以确保引用成功。如果不使用相对路径,则可能找不到资源文件…

    Vue 2023年5月28日
    00
  • 详解Vue方法与事件

    详解Vue方法与事件 在Vue中,方法和事件是非常重要的概念。方法可以被组件直接调用,而事件则是通过组件之间通信来触发。本篇攻略将详细讲解Vue的方法和事件,让你对其有更清晰的理解。 方法 方法是Vue的一个核心概念,它定义了组件内的可复用行为。方法可以通过定义在Vue实例中的methods属性中,也可以直接在组件中定义。方法与普通的JavaScript函数…

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