浅析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的动态组件是如何工作的

    Vue3 的动态组件相比于 Vue2 有了较大的改变,本文将详细讲解 Vue3 的动态组件是如何工作的,包括其实现原理和示例说明。 什么是动态组件 Vue 中的组件是指可复用并具有独立功能的代码块,根据其作用域及其之间的交互可以实现复杂的组件化应用。而动态组件,顾名思义指在运行时可以动态地切换所渲染的组件。 Vue3 中动态组件的实现原理 在 Vue2 中,…

    Vue 2023年5月27日
    00
  • Vue.js响应式数据的简单实现方法(一看就会)

    我会根据这个题目,给你提供一个完整markdown格式文本的攻略。 Vue.js响应式数据的简单实现方法(一看就会) Vue.js作为比较流行的前端JS框架,其中响应式数据是它所支持的重要特性之一。那么,对于Vue.js响应式数据的实现方法,我会在下面介绍一些可以让初学者一看就会的方法。 实现原理 Vue.js的实现原理是基于ES5中的Object.defi…

    Vue 2023年5月28日
    00
  • Vue项目中打包优化的四种方法详解

    Vue项目中打包优化的四种方法详解 Vue是一个流行的JavaScript前端框架,它拥有易学易用、功能强大的特点,可以帮助开发者快速构建高效的Web应用程序。然而,在较大的Vue项目中,应用程序的文件大小和加载时间可能会成为问题。在本文中,我们将介绍四种Vue项目中打包优化的方法,以减少应用程序的加载时间和文件大小。 方法1:使用CDN 使用CDN(内容分…

    Vue 2023年5月27日
    00
  • Vue中前端与后端如何实现交互

    在Vue中,前端与后端交互有多种方式可供选择,以下是其中两种常用的方式。 1. RESTful API REST(Representational State Transfer, 表式状态转移)是Web应用程序中最常用的API设计风格。Vue前端通过RESTful API与后端交互,前端通过HTTP请求对后端发起请求,获取并处理返回的JSON数据,来完成前端…

    Vue 2023年5月27日
    00
  • Vue项目部署后提示刷新版本的实现代码

    当我们部署 Vue 项目时,通常情况下,部署完成后用户需要手动刷新页面才能加载最新版本。为了提供更好的用户体验,我们可以使用一些方法来实现自动刷新页面的功能。以下是一些实现方法的示例说明。 方法一:添加版本号 第一种方法是通过添加版本号到静态资源文件来实现自动刷新页面。具体实现步骤如下: 在 Vue 项目中的 index.html 文件中添加版本号到静态资源…

    Vue 2023年5月28日
    00
  • Electron学习应用程序打包实例详解

    Electron学习应用程序打包实例详解 Electron是一种开源的框架,可以使用HTML,CSS和JS来开发桌面应用程序。在本文中,我们将重点介绍如何打包Electron应用程序。 安装Electron Builder Electron Builder是一种著名的Electron打包工具,它可以将Electron应用程序打包成可执行文件。首先,我们需要使…

    Vue 2023年5月27日
    00
  • vue + electron应用文件读写操作

    下面我将详细讲解关于“vue + electron应用文件读写操作”的完整攻略,其中包含了两条示例说明。 1. 环境准备 在开始编写应用程序之前,需要先进行环境搭建。要使用Vue和Electron配合进行文件读写操作,需要进行如下步骤: 确保已安装Node.js和npm包管理工具,建议安装最新版。 创建一个新项目,如下所示: “` mkdir vue-el…

    Vue 2023年5月27日
    00
  • vue 使用el-table循环轮播数据列表的实现

    下面是详细讲解“vue 使用el-table循环轮播数据列表的实现”的完整攻略。 Vue中使用El-table渲染数据 在Vue中,可以使用Element UI提供的表格组件el-table来渲染数据列表。el-table非常适用于多种不同的场景,包括但不限于数据展示、数据分页、搜索等等,而且具有非常丰富的功能和定制化选项。 要使用el-table渲染数据列…

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