vue中computed顺序、watch顺序、响应次数使用

 更新时间:2024年08月07日 09:35:42   作者:秦时明月之安康  
这篇文章主要介绍了vue中computed顺序、watch顺序、响应次数使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

先看代码

<template>
  <div class="hello">
    <button style="font-size: 40px;" @click="change">改变值</button>
  </div>
</template>

<script>
export default {
  name: "HelloWorld",
  data() {
    console.log("data");
    return {
      a: 1,
      a2: 1
    };
  },
  watch: {
    a() {
      console.log("watch a");
    },
    b() {
      console.log("watch b");
    },
    c() {
      console.log("watch c");
    },
    a2() {
      console.log("watch a2");
    }
  },
  computed: {
    b() {
      console.log("computed b");
      return this.a + 1;
    },
    c() {
      console.log("computed c");
      return this.b + this.a;
    },
    d() {
      console.log("computed d");
      return this.a + 1;
    }
  },
  methods: {
    change() {
      console.log("-");
      this.a2 += 1;
      console.log("--");
      this.a += 1;
      console.log(this.c);
      console.log("---");
    }
  }
};
</script>

<style scoped lang="less"></style>

输出结果

页面渲染完成的输出

点击按钮的输出

跟你的预期一致么?如果不一致,为什么?

分析过程

  • vue是如何知道computed内的响应式变量发生了变化?答:第一次调用时收集依赖
  • a 是 data,b watch 了 a,c watch 了 a 和 b,问 a 变化时,c 执行多少次?答:1次
  • 同一个函数内修改了 data 的两个值,watch 中的调用顺序是否与修改 data 的值的顺序有关?答:无关,只与 watch 的定义顺序有关
  • 一个函数 f1 内修改 data 变量 a,执行完该函数前,watch a 的函数是否会在 f1 执行完毕之前执行?答:不会,会先缓存待执行的 watch 函数,之后再统一调用这些 watch 方法
  • 初始化加载页面时,computed 是否会执行?答:不会,调用时才会执行(观察 computed 的 d 从未执行过。而打印computed b,是因为 watch 了 b)。
  • 变量发生变化时,watch 先执行?还是 computed 先执行?答:computed(有的话)
  • computed 的打印顺序是否与定义顺序有关?答:无关,只与变化顺序有关
  • 若在 chrome DevTools 中 vue 插件查看此组件的数据,则会执行一次 computed d

  • 何时会执行 computed ?答:被调用时。分几种情况:被 template 调用时、被实际执行的代码调用时、被 watch 时
  • data 跑完才跑 watch

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • vue实现登录功能

    vue实现登录功能

    这篇文章主要介绍了vue实现登录功能的步骤,帮助大家更好的理解和使用vue框架,感兴趣的朋友可以了解下
    2020-12-12
  • 基于Vue开发一个很火的卡片动画效果

    基于Vue开发一个很火的卡片动画效果

    这篇文章主要为大家详细介绍了如何基于Vue开发一个很火的卡片动画效果,大致包含两个效果,光的跟随效果还有卡片倾斜像 3D 的效果,感兴趣的可以了解一下
    2024-02-02
  • 在Vue3中创建和使用自定义指令的实现方式

    在Vue3中创建和使用自定义指令的实现方式

    在现代前端开发中,Vue.js 是一个非常流行的框架,它提供了许多强大的功能来帮助开发者构建高效的用户界面,自定义指令是 Vue.js 的一个重要特性,它允许开发者扩展 HTML 元素的功能,本文将详细介绍如何在 Vue3 中创建和使用自定义指令,并提供示例代码来帮助理解
    2024-12-12
  • 浅谈vue实现数据监听的函数 Object.defineProperty

    浅谈vue实现数据监听的函数 Object.defineProperty

    本篇文章主要介绍了浅谈vue实现数据监听的函数 Object.defineProperty,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • vue3新拟态组件库开发流程之table组件源码分析

    vue3新拟态组件库开发流程之table组件源码分析

    这篇文章主要介绍了vue3新拟态组件库开发流程——table组件源码,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04
  • Vue3响应式高阶用法之markRaw()的使用

    Vue3响应式高阶用法之markRaw()的使用

    在Vue3中,markRaw()用于防止对象被转换为响应式,适用于管理大型库对象或静态数据,有助于优化性能和防止不必要的修改,本文就来详细的介绍一下,感兴趣的可以了解一下
    2024-09-09
  • vue--elementui中如何修改el-input样式

    vue--elementui中如何修改el-input样式

    在使用 element ui 组件过程中,我最近碰到了新的问题,vue--elementui中如何修改el-input样式呢,今天小编通过示例代码给大家详细讲解,需要的朋友参考下吧
    2023-05-05
  • 详解Vue如何手写虚拟dom并进行渲染

    详解Vue如何手写虚拟dom并进行渲染

    这篇文章主要为大家详细介绍了渲染器的工作原理,以及如何将真实dom或者组件用虚拟dom的形式进行描述并渲染,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-03-03
  • vue实现跳转接口push 转场动画示例

    vue实现跳转接口push 转场动画示例

    今天小编就为大家分享一篇vue实现跳转接口push 转场动画示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • 详解Vue 开发模式下跨域问题

    详解Vue 开发模式下跨域问题

    本篇文章主要介绍了Vue 开发模式下跨域问题,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06

最新评论