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

yizhihongxing

浅析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日

相关文章

  • 分享一个基于Ace的Markdown编辑器

    请看下面的完整攻略: 分享一个基于Ace的Markdown编辑器 步骤1:下载并引入Ace编辑器 Ace是一个通用的代码编辑器,我们可以在官方网站下载最新版本的Ace。在下载后,我们需要将其引入我们的HTML文件中。 <!– 引入相关CSS文件 –> <link rel="stylesheet" href=&quot…

    Vue 2023年5月28日
    00
  • vuecli项目构建SSR服务端渲染的实现

    下面是关于“vuecli项目构建SSR服务端渲染的实现”的完整攻略: 1. 什么是SSR? SSR全称Server Side Rendering(服务端渲染),意思是将页面在服务器端进行渲染,然后再将已渲染的页面传输给客户端展示出来。 SSR的好处: 更快的页面渲染速度,减少白屏时间 更好的SEO(搜索引擎优化) 更好的用户体验 2. Vue CLI 3 如…

    Vue 2023年5月28日
    00
  • vue中实现上传文件给后台实例详解

    针对“vue中实现上传文件给后台的实例详解”,我的回答将分为以下几个部分说明: 概述 前端实现步骤 后端实现步骤 示例说明1 示例说明2 1. 概述 Vue是一种现代化的JavaScript框架,它能够帮助我们快速构建交互式界面。在许多Web应用程序中,我们需要允许用户上传文件到我们的服务器。尽管Vue本身并不提供文件上传功能,但通过结合一些其他的JavaS…

    Vue 2023年5月28日
    00
  • 基于Vant UI框架实现时间段选择器

    下面我来详细讲解如何基于Vant UI框架实现时间段选择器的攻略。 1. 确定需求和使用Vant UI框架 首先需要确定需求,即实现一个时间段的选择器,并且选择器需要基于Vant UI框架实现。Vant UI 是一个轻量、可靠的移动端 Vue 组件库。我们可以使用npm来安装Vant UI,命令如下: npm i vant -S 2. 导入Vant UI组件…

    Vue 2023年5月29日
    00
  • 简单聊一聊axios配置请求头content-type

    当使用axios发送HTTP请求时,你可以在请求中添加headers头部来指定Content-Type类型。默认情况下,Content-Type类型为application/json。这意味着在发送axios请求时,如果我们的请求需要使用不同的Content-Type设置,我们需要进行额外的配置。 下面是一份通用的axios请求配置,可以让我们设置请求头的C…

    Vue 2023年5月28日
    00
  • Vue中的局部组件介绍

    当我们在开发Vue应用程序时,我们通常需要将页面简化成多个模块化的组件。这个时候,我们可以使用Vue的局部组件来实现这个目的。Vue的局部组件是一种允许我们在单个Vue组件中注册私有的子组件的机制。在这个过程中,我们可以将一个Vue组件分解成多个小组件,并将这些组件放置在同一个父组件中,以更好地管理和重复使用这些组件。 如何在Vue中实现局部组件 在Vue中…

    Vue 2023年5月27日
    00
  • JS实现的简单标签点击切换功能示例

    首先来讲一下JS实现的简单标签点击切换功能示例的攻略。 1. 确定页面结构和元素 首先我们需要确定页面结构和需要被点击切换的标签元素。在示例中,我们可以使用HTML ul 和 li 标签来实现。 <ul class="tab"> <li class="active">标签1</li>…

    Vue 2023年5月28日
    00
  • ConstraintValidator类如何实现自定义注解校验前端传参

    要实现自定义注解校验前端传参,需要使用到Java中的ConstraintValidator类。以下是实现的步骤: 创建自定义注解 首先需要创建一个自定义注解,并定义需要校验的参数和校验条件。下面的示例定义了一个名为CheckPassword的注解,用来校验密码是否符合规定的长度和包含数字、字母和特殊字符: import javax.validation.Co…

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