对Vue3中reactive的深入理解

当我们在Vue3中使用reactive函数时,需要了解以下几个概念:

  1. reactive函数用于将数据转换为响应式数据对象,返回一个Proxy代理对象,该对象会拦截对其属性的所有读取和修改操作,从而实现响应式更新

  2. ref函数用于将基础类型数据转换为响应式数据对象,返回一个Ref对象。Ref对象和Proxy对象一样也可以在模板或者JS代码中使用,并且也会自动追踪响应式更新

  3. computed函数用于对多个响应式数据进行计算和监听变化,返回一个Computed Ref对象。计算属性在对其中一个依赖进行修改后会自动更新。

下面是一个使用reactive的示例:

import { reactive } from 'vue';
const state = reactive({
  count: 0
});

在上述示例中,我们使用reactive函数将对象{count:0}转换为一个响应式的数据对象,同时也返回了一个Proxy代理对象state。

如果我们需要在组件中使用这个响应式数据对象,只需要在模板中使用即可:

<template>
  <div>{{state.count}}</div>
  <button @click="increment">增加</button>
</template>
<script>
import { reactive } from 'vue';
export default {
  setup() {
    const state = reactive({
      count: 0
    });
    const increment = () => {
      state.count++;
    }
    return { state, increment };
  }
}
</script>

上述示例中,我们在组件setup函数中使用reactive函数创建了响应式数据对象state。然后在组件模板中,直接使用state.count输出计数器的值。同时我们还添加了一个按钮,点击按钮后调用increment函数,通过修改state.count来实现响应式更新。

下面是一个使用computed的示例:

<template>
  <div>总价:{{ total }}</div>
  <ul>
    <li v-for="p in products" :key="p.id">
      <div>{{ p.name }}</div>
      <div>价格:{{ p.price }}</div>
      <input type="number" v-model="p.quantity">
      <div>小计:{{ p.subtotal }}</div>
    </li>
  </ul>
</template>
<script>
import { reactive, computed } from 'vue';
export default {
  setup() {
    const products = reactive([
      { id: 1, name: '商品1', price: 10, quantity: 2 },
      { id: 2, name: '商品2', price: 20, quantity: 1 },
      { id: 3, name: '商品3', price: 30, quantity: 3 }
    ]);
    const total = computed(() => {
      return products.reduce((sum, p) => { return sum + p.price * p.quantity }, 0);
    });
    return { products, total };
  }
}
</script>

在上述示例中,我们使用reactive创建了一个数组对象products,数组中包含了多个对象,每个对象都有一个quantity属性,表示商品的数量,我们希望实现当商品数量发生改变时,总价能够自动更新。因此我们使用computed函数来计算总价,返回一个计算属性对象total,并在模板中输出total的值。

同时,我们在模板中使用v-model指令来绑定商品数量,当商品数量发生改变时,会自动触发计算属性的重新计算,从而实现了响应式更新的功能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:对Vue3中reactive的深入理解 - Python技术站

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

相关文章

  • vue如何给数组添加新对象并赋值

    首先,我们需要明确需要添加的对象的数据结构,例如: { "id": 1, "name": "John Doe", "email": "johndoe@example.com" } 接着,我们可以使用Vue提供的响应式方法来添加一个对象到数组中: this.us…

    Vue 2023年5月28日
    00
  • vue添加axios,并且指定baseurl的方法

    下面为你详细讲解“Vue添加Axios,并且指定BaseURL的方法”: 1. 安装 Axios 我们需要先安装 Axios 库,可以通过 npm 安装,命令如下: npm install axios –save 2. 引入 Axios 安装完成后,我们需要先引入 Axios 库,建议在 main.js 中引入,然后在 Vue.prototype 上挂载 …

    Vue 2023年5月29日
    00
  • vue项目刷新当前页面的三种方式(重载当前页面数据)

    有关Vue项目刷新当前页面的三种方式,可以从以下三个方面展开说明: 1. 利用location.reload()方法进行页面刷新 在Vue中,可以通过调用浏览器原生的location.reload()方法来实现页面刷新。该方法会重新加载当前页面,重新发起一次网络请求,对页面元素进行重绘,因此能够实现重载当前页面数据的目的。可以在Vue组件中定义一个方法,通过…

    Vue 2023年5月29日
    00
  • Vue 实现v-for循环的时候更改 class的样式名称

    当我们在 Vue 中使用 v-for 指令进行循环渲染列表的时候,有时候可能需要根据不同的条件给不同的元素添加不同的样式名称。Vue 中实现这个功能的方法很简单,只需要在 v-bind:class 属性中绑定一个动态的对象即可。 具体的步骤如下: 在 v-for 循环中,使用 v-bind:class 绑定一个动态的对象。 <div v-for=&qu…

    Vue 2023年5月29日
    00
  • 超实用vue中组件间通信的6种方式(最新推荐)

    超实用vue中组件间通信的6种方式(最新推荐) Vue是一个组件化的框架,组件间的通信是非常重要的部分。本文总结了6种超实用的Vue组件间通信的方式,分别是props和$emit、$parent和$children、$refs、事件总线、Vuex和provide和inject。 方式一:props和$emit props和$emit是vue中非常基础中的通信…

    Vue 2023年5月28日
    00
  • 浅谈Vue-cli 命令行工具分析

    下面我将详细讲解 “浅谈Vue-cli 命令行工具分析” 的完整攻略。 什么是Vue-cli ? Vue-cli 是一个官方提供的基于 Vue.js 快速创建项目的命令行工具,它提供了一整套前端工具体系,可以快速搭建起一个前端开发和生产环境所需要的开发框架。 Vue-cli 常用于开发 Vue.js 的单页面应用(SPA)和 webpack 多页面应用(MP…

    Vue 2023年5月28日
    00
  • Vue前端如何实现生成PDF并下载功能详解

    生成PDF并下载功能是许多Web应用程序需要的一个重要功能,为Vue项目添加PDF的生成可以满足这些需求。在Vue前端如何实现生成PDF并下载功能的攻略中,需要完成以下步骤: 第一步:安装依赖 首先需要安装一个支持PDF生成的依赖包jspdf,方法如下: npm install jspdf –save 第二步:编写Vue组件 在Vue组件中,通过创建画布和…

    Vue 2023年5月27日
    00
  • 3分钟带你快速认识Vue3中的v-model

    3分钟带你快速认识Vue3中的v-model Vue3中的v-model相比Vue2版本有了一些改动,新版本中v-model被封装成一个Directive,这个Directive能够更好的协调子组件之间双向绑定的问题。 什么是v-model v-model指令的职责是在表单元素和组件上创建双向绑定。在Vue2版本中,v-model只能对表单元素进行使用。而在…

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