对Vue3中reactive的深入理解

yizhihongxing

当我们在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 解决在element中使用$notify在提示信息中换行问题

    要在 element-ui 的 $notify 中进行换行,可以使用 html 标签进行内容换行。但是,直接在 $notify 中插入 html 标签会将其解析为字符串,而不是渲染成为 html 元素。因此许多人会通过使用 dangerouslyUseHTMLString 属性,来将 <br> 等 html 标签渲染为真正的 html 元素。 以…

    Vue 2023年5月27日
    00
  • vue3生命周期原理与生命周期函数简单应用实例分析 原创

    Vue3生命周期原理与生命周期函数简单应用实例分析 Vue3的生命周期和Vue2有些不同,但是原理和应用都是相似的。本文将从原理和应用两个方面分别讲解Vue3的生命周期。 原理 Vue3的生命周期可分为三个阶段:beforeCreate、created、beforeMount、mounted、beforeUpdate、updated、beforeUnmoun…

    Vue 2023年5月28日
    00
  • 详解vue中axios请求的封装

    下面我会详细讲解vue中axios请求的封装。 前言 在vue项目开发中,我们经常需要使用到axios进行数据请求。但是,每次使用axios都需要重复的书写请求代码,一方面增加了代码量,另一方面也容易造成代码的维护成本变高。 所以,我们需要将axios请求进行封装,以便于复用和维护代码。 封装步骤 1. 安装axios 在vue项目中,使用axios请求前,…

    Vue 2023年5月28日
    00
  • vue 3.0 vue.config.js文件常用配置方式

    下面就是关于“vue 3.0 vue.config.js文件常用配置方式”的完整攻略。 1. vue.config.js文件是什么 在Vue 3.0及以上版本中,通常需要通过vue.config.js文件进行项目的相关配置,例如webpack、开发服务器、路径等等。vue.config.js是一个可选的配置文件,如果存在,那么它会被默认加载,在vue-cli…

    Vue 2023年5月28日
    00
  • Vue获取页面元素的相对位置的方法示例

    下面是详细讲解“Vue获取页面元素的相对位置的方法示例”的攻略: 1. 介绍 在前端开发中,有时需要获取页面元素相对于整个页面的位置坐标,以便实现一些操作和效果。本文将介绍在Vue中获取页面元素相对位置的方法及其示例。 2. 方法 在Vue中,可以通过 ref 属性来引用页面元素,并通过 this.$refs 获取对其的引用。获取到元素后,可以使用 getB…

    Vue 2023年5月29日
    00
  • 基于elementUI使用v-model实现经纬度输入的vue组件

    下面是详细的攻略。 简介 在开发vue前端应用时,我们经常需要使用表单组件,而表单组件的一种最常见的需求是输入经纬度信息。在这个需求中,我们需要使用两个输入框分别输入经度和纬度,而这两个值通常需要使用一个对象来传递。另外,为了提升开发效率,我们可以使用elementUI中的input和input-number组件对输入框进行美化,使用v-model指令来实现…

    Vue 2023年5月29日
    00
  • Vue自定义指令v-focus实例详解

    Vue自定义指令v-focus实例详解: 自定义指令是Vue中重要的一种拓展方式,可以用来封装常用的操作,比如事件绑定、样式切换等等。v-focus就是一个简单的自定义指令,用于在元素被插入到页面中时,自动获得焦点。 下面,我们来详细讲解如何创建v-focus指令。 创建v-focus指令 在Vue中注册一个全局指令很简单,只需调用Vue.directive…

    Vue 2023年5月29日
    00
  • VUE 实现动态给对象增加属性,并触发视图更新操作示例

    VUE 实现动态给对象增加属性,并触发视图更新操作可以通过以下两个示例进行说明。 示例一 <template> <div> <button @click="addAttr">添加属性</button> <span>添加属性之前:</span><span>{…

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