Vue computed实现原理深入讲解

yizhihongxing

首先我们来了解一下Vue computed属性的作用。

Vue中的computed属性是用于监听依赖变化并进行缓存的属性,其返回值会被缓存,只有当其依赖的属性发生变化时,才会重新计算并返回新值。这样可以避免反复重复计算已经得出的结果。

那么,Vue computed实现原理究竟是什么呢?

首先,我们需要了解computed属性的初始化时机。在Vue实例挂载后,会进行响应式数据的依赖收集和watcher的创建。

对于每个computed属性定义,在Vue实例挂载时,会将其getter函数作为watcher实例的求值函数,并通过Dep类在数据对象的getters数组中进行依赖收集。

当computed属性所依赖的数据发生变化时,watcher实例就会接收到数据更新的通知,并触发对应的setter函数重新求值。

整个computed属性实现的核心在于computed属性的getter函数和对应watcher的求值函数,以及对getter函数进行缓存的机制。

下面我们来演示一下computed属性的使用:

<body>
  <div id="app">
    <p>当前计数值为: {{ count }}</p>
    <p>计算属性: {{ computedCount }}</p>
    <button @click="increment">点击增加</button>
  </div>
</body>

<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
  var vm = new Vue({
    el: '#app',
    data() {
      return {
        count: 0
      }
    },
    computed: {
      computedCount() {
        console.log('计算属性函数执行了')
        return this.count * 2
      }
    },
    methods: {
      increment() {
        this.count++
      }
    }
  })
</script>

在上面的代码中,我们定义了data中的count属性,和computed中的computedCount属性。其中,computedCount属性对count属性进行了监听并做出了相应的计算。每当count属性变化时,其会重新计算并返回新值。

现在我们来增加计数,观察控制台输出结果变化:

可以看到,当count属性发生变化时,computedCount属性的计算函数被重新执行了,而计算函数的结果被缓存起来供下一次使用。

另一个更有趣的示例是一个购物车计价器。我们有一个商品列表,每当用户选择或修改一件商品的数量时,我们需要重新计算总价。

下面是这个案例的代码示例:

<body>
  <div id="app">
    <ul>
      <li v-for="item in list">
        {{ item.name }}:
        <input type="number" v-model="item.num" @change='updateTotal'>
        <span class="price">{{ item.price }}元</span>
      </li>
    </ul>
    <p>购物车总价:{{ total }}元</p>
  </div>
</body>

<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
  var vm = new Vue({
    el: '#app',
    data() {
      return {
        list: [
          { name: '商品A', price: 10, num: 1 },
          { name: '商品B', price: 20, num: 2 },
          { name: '商品C', price: 30, num: 3 }
        ],
        total: 0
      }
    },
    computed: {
      computedTotal() {
        console.log('计算总价函数执行了')
        return this.list.reduce((sum, item) => sum + item.price * item.num, 0)
      }
    },
    methods: {
      updateTotal() {
        this.total = this.computedTotal
      }
    }
  })
</script>

在上面的代码中,我们定义了一个名为list的数组来存储商品列表,以及一个名为total的computed属性来计算商品总价。当用户修改商品的数量时,我们调用了updateTotal方法来更新computed属性的值。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue computed实现原理深入讲解 - Python技术站

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

相关文章

  • Vue3 composition API实现逻辑复用的方法

    当我们使用Vue3进行开发时,使用Vue Composition API可以极大地提升我们的开发效率。这里详细介绍了如何使用Vue3 Composition API实现逻辑复用的方法。 什么是Vue3 Composition API Vue3 Composition API是一种新的、基于函数的API,它可以让我们更灵活地组织我们的逻辑代码,提高代码的可读性…

    Vue 2023年5月28日
    00
  • vue 数据遍历筛选 过滤 排序的应用操作

    关于Vue数据的遍历、筛选、过滤以及排序操作,我可以提供如下的完整攻略: 1. 使用v-for进行数据遍历 在Vue中,使用v-for指令可以方便地进行数据遍历,例如: <ul> <li v-for="item in items">{{item}}</li> </ul> 这个例子中,我们使用…

    Vue 2023年5月28日
    00
  • axios向后台传递数组作为参数的方法

    当使用 axios 向后台传递数组作为参数时,可以通过两种方法来实现。 方法一:使用 URLSearchParams 对象 在前端将数组转换为 URLSearchParams 对象,再通过 axios 发送请求。具体代码如下: import axios from ‘axios’; const params = new URLSearchParams(); c…

    Vue 2023年5月29日
    00
  • vue select组件绑定的值为数字类型遇到的问题

    问题描述: 在使用 Vue.js 中的 select 组件时,如果绑定的值是数字类型,会遇到一些问题,例如选择一个选项后,绑定的值不是选项本身的值,而会是选项的索引值。 解决方法: 使用 v-model.number 来强制将输入值转为数字类型。 在 select 标签上使用 v-model.number,可以让 select 组件将选中的值强制转为数字类型…

    Vue 2023年5月29日
    00
  • 在VUE style中使用data中的变量的方法

    在Vue的style中使用组件中的数据变量可以通过:style绑定对象来实现。具体方法如下: 定义组件时,定义组件中需要的数据变量 Vue.component(‘my-component’, { data: function () { return { color: ‘red’ } }, template: ‘<div :style="{ c…

    Vue 2023年5月29日
    00
  • Vue.js每天必学之计算属性computed与$watch

    下面是详细讲解 Vue.js 中计算属性 computed 与 $watch 的攻略。 计算属性 computed 概念 计算属性是一种带有缓存功能的属性,它依赖于其它属性值,并且其返回值会根据这些被依赖的值变化而改变。计算属性除了需要响应式依赖,还可以拥有自己的缓存,只要它所依赖的属于没有发生改变,那么多次读取该计算属性时,只会进行一次计算。 用法 我们可…

    Vue 2023年5月29日
    00
  • vue.js异步上传文件前后端实现代码

    下面我会详细地讲解“Vue.js异步上传文件前后端实现代码”的完整攻略。 准备工作 在正式开始编写代码之前,我们需要进行一些准备工作: 确认后端服务器是否支持文件上传,并且上传的文件大小是否有限制。 安装Vue.js插件vue-file-upload,它提供了非常方便的上传文件功能。 前端实现 添加上传组件 首先,我们需要在页面中添加上传组件。可以使用vue…

    Vue 2023年5月28日
    00
  • 浅谈使用Vue完成移动端apk项目

    针对这个问题,我准备了以下的完整攻略: 浅谈使用Vue完成移动端apk项目 1. 熟悉Vue框架 在使用Vue完成移动端apk项目之前,我们需要熟悉Vue框架的基本原理和用法。Vue是一款轻量级的前端框架,易于上手,并且具有很好的可维护性和扩展性。 熟练掌握Vue的基本语法,包括 Vue实例、组件、生命周期等; 熟悉Vue的核心思想和常用插件,比如Vue R…

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