对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 AST的转换实现方法讲解

    一、Vue AST转换的概念及作用 Vue AST是Vue编译器中的一种概念,它可以帮助我们理解Vue模板编译的本质,同时还可以提供一些优化编译模板的方法。AST(抽象语法树)是将代码解析后,构建出来的一棵树形结构模型,表示程序的语法结构,利用AST可以进行程序的分析、优化及计算机制等处理。 在Vue的编译过程中,Vue会先将模板编译成AST节点,然后再转换…

    Vue 2023年5月28日
    00
  • Vue实现通知或详情类弹窗

    这里是关于“Vue实现通知或详情类弹窗”的完整攻略。 第一步:选择组件库 Vue有许多优秀的组件库供我们使用。其中,ElementUI、BootstrapVue、Vuetify、Ant Design Vue等都是非常流行的组件库,它们都包含了丰富的弹窗组件,可以大大减少我们的工作量。 以ElementUI为例,我们可以使用其中的MessageBox组件来实现…

    Vue 2023年5月29日
    00
  • axios拦截器工作方式及原理源码解析

    axios拦截器工作方式及原理源码解析 什么是拦截器 在介绍拦截器的工作方式及原理源码解析之前,我们首先需要了解什么是拦截器。 在axios中,拦截器分为请求拦截器和响应拦截器,它们分别对发出的请求和返回的响应进行拦截处理。 请求拦截器 请求拦截器允许我们在请求被发送之前对其进行处理,这包括检查请求配置、转换请求数据等操作。 axios.intercepto…

    Vue 2023年5月28日
    00
  • vue利用openlayers实现动态轨迹

    “vue利用openlayers实现动态轨迹”的实现过程中,需要安装openlayers、esri-leaflet等相关库,而vue可以利用npm进行安装,具体步骤如下: 安装依赖库 npm install ol esri-leaflet –save 在Vue中引入openlayers和esri-leaflet import ‘ol/ol.css’ imp…

    Vue 2023年5月28日
    00
  • vue2.0 自定义日期时间过滤器

    下面是“vue2.0自定义日期时间过滤器”的完整攻略: 1. 什么是过滤器? 过滤器是Vue.js中一种很常见的处理数据的方式,本质上它就是一种特殊的函数,可以用在一些绑定表达式中(从模型到视图和从视图到模型)。 2. 自定义日期时间过滤器的步骤 下面通过一步一步的操作来完成自定义日期时间过滤器的任务: 2.1 安装moment.js moment.js是一…

    Vue 2023年5月28日
    00
  • vue动态添加store、路由和国际化配置方式

    为了动态添加 store、路由和国际化配置,可以使用 Vue.js 提供的插件系统。下面是具体的步骤: 动态添加 store 首先,我们需要创建一个新的 store 模块。这可以通过在一个 JavaScript 文件中定义一个新模块来完成,如下所示: // myModule.js export default { state: { foo: ‘bar’ },…

    Vue 2023年5月29日
    00
  • 基于Vue3和element-plus实现登录功能(最终完整版)

    接下来我将为您讲解“基于Vue3和element-plus实现登录功能(最终完整版)”的完整攻略。 一、前置知识 在学习本教程前,需要掌握以下技术: Vue3基础知识 Element Plus UI框架的使用 前端基础知识,如 HTTP 等协议、Cookie 和 Session 等概念 前端路由和组件化开发思想 二、实现步骤 1. 创建vue-cli项目 使…

    Vue 2023年5月28日
    00
  • Vue中使用 class 类样式的方法详情

    下面我将详细讲解在Vue中使用class样式的方法: 一、Vue中绑定class样式的常见方法 1. 绑定单个class样式 使用v-bind或:直接绑定class属性,即class=”[className]”,[className]为你想要应用的样式类名。 比如我们有一个<div>元素,需要加上red样式: <template> &…

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