vue中created、watch和computed的执行顺序详解

请看下面的攻略。

Vue中created、watch和computed的执行顺序详解

在Vue中,我们可以使用created、watch和computed来响应数据的变化,但是它们的执行顺序可能会导致一些意想不到的问题。下面我将详细讲解它们的执行顺序。

1. created的执行顺序

当一个Vue实例被创建时,created钩子函数会立即被调用。在created阶段,该实例已经完成了数据观测,也已经设置了计算属性、观察者、事件和watch等。我们可以在该阶段访问数据,但是DOM尚未完成编译,因此无法访问DOM元素。

下面的代码展示了一个简单的示例,它演示了created的执行顺序:

new Vue({
  data() {
    return {
      count: 0
    }
  },
  created() {
    console.log('我是created钩子函数')
    console.log('count值为:', this.count)
  }
})

输出结果如下:

我是created钩子函数
count值为: 0

2. watch的执行顺序

watch选项用于观察Vue实例的数据变动。当数据发生变化时,watch会自动触发回调函数,让我们可以进行特定的处理。在Vue实例创建后,watch选项会被先于created钩子函数执行。

下面的代码展示了一个简单的示例,它演示了watch的执行顺序:

new Vue({
  data() {
    return {
      count: 0
    }
  },
  watch: {
    count(newValue, oldValue) {
      console.log('count一旦发生变化,我就会被触发')
      console.log('新值:', newValue, '旧值:', oldValue)
    }
  },
  created() {
    console.log('created钩子函数执行完毕')
  }
})

输出结果如下:

count一旦发生变化,我就会被触发
新值: 1 旧值: 0
created钩子函数执行完毕

我们可以看到,当count发生变化时,先执行了watch选项,后执行了created钩子函数。

3. computed的执行顺序

computed属性是计算属性,它会根据现有的数据计算出一个结果,并将其缓存起来。只有在计算属性依赖的数据发生变化时,计算属性才会重新计算。在Vue实例创建后,computed属性会先于created钩子函数执行。

下面的代码展示了一个简单的示例,它演示了computed的执行顺序:

new Vue({
  data() {
    return {
      count: 0
    }
  },
  computed: {
    message() {
      return `count的值是:${this.count}`
    }
  },
  created() {
    console.log('created钩子函数执行完毕')
    console.log('计算属性的值:', this.message)
  },
  watch: {
    count(newValue, oldValue) {
      console.log(`count发生变化:${oldValue} => ${newValue}`)
    }
  }
})

输出结果如下:

created钩子函数执行完毕
计算属性的值: count的值是:0

我们可以看到,在created钩子函数执行的时候,计算属性的值已经被缓存起来了。只有在count发生变化时,计算属性才会重新计算。

4. 通过示例进一步理解执行顺序

下面的代码展示了一个比较复杂的示例,它可以让我们更好地理解Vue中created、watch和computed的执行顺序:

new Vue({
  data() {
    return {
      count: 0,
      message: ''
    }
  },
  watch: {
    count(newValue, oldValue) {
      console.log(`count发生变化:${oldValue} => ${newValue}`)
      this.message = `count的新值为:${newValue}`
    }
  },
  computed: {
    showCount() {
      console.log('计算属性showCount被计算了')
      return this.count * 2
    }
  },
  created() {
    console.log('created钩子函数执行完毕')
    console.log('计算属性的值:', this.showCount)
    console.log('初始message:', this.message)
    this.count++
  }
})

输出结果如下:

计算属性showCount被计算了
created钩子函数执行完毕
计算属性的值: 0
初始message: 
count发生变化:0 => 1
计算属性showCount被计算了

我们可以看到,当Vue实例创建时,先执行了computed属性的计算,然后执行了created钩子函数。在created钩子函数中,我们将count的值增加了1,这导致了count的watcher被触发。该watcher将message的值更新为count的新值为:1。这时候,计算属性showCount又被重新计算了一次,最后的值为2。

最后再次提醒一下,虽然Vue生命周期中各种钩子函数的执行顺序是固定的,但是不同Vue版本的执行顺序可能会有差异,也取决于具体业务代码的编写。因此,在编写Vue代码时,请务必测试代码以了解它是如何执行的。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue中created、watch和computed的执行顺序详解 - Python技术站

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

相关文章

  • 如何基于Vue制作一个猜拳小游戏

    下面是基于Vue制作一个猜拳小游戏的完整攻略。 确定游戏规则 在开始制作小游戏之前,我们需要确定游戏规则。假设游戏规则如下: 双方玩家进行猜拳,猜拳的结果有石头、剪刀、布三种情况。 石头胜剪刀,剪刀胜布,布胜石头。 双方猜拳结果相同,平局。 玩家可以选择猜拳次数。 创建Vue应用 首先,我们需要创建一个Vue应用。我们可以使用Vue CLI来快速创建一个基本…

    Vue 2023年5月27日
    00
  • 详解Vue自定义指令及使用

    详解Vue自定义指令及使用 什么是Vue自定义指令? Vue自定义指令是一种可以用来扩展Vue.js的功能的语法,它可以让我们自定义一些指令,以实现一些特定的交互效果、操作等。Vue自带了一些常用指令比如v-if、v-show等,但在实际业务开发中,有时还需要自定义指令来满足特定的需求。 自定义指令一般由两个部分组成:指令注册和指令函数。 如何注册自定义指令…

    Vue 2023年5月28日
    00
  • vue.js父子组件传参的原理与实现方法 原创

    下面是关于“vue.js父子组件传参的原理与实现方法”的详细攻略: 一、原理 在Vue.js中,父子组件之间的传参可以使用props进行实现。子组件可以通过props接收父组件传递的数据,而父组件则可以动态地改变这些数据,并且这些数据的变化会自动反应到子组件中。 具体而言,实现父子组件间传参的原理是: 父组件向子组件传递数据,需要定义props属性并在子组件…

    Vue 2023年5月27日
    00
  • 简单的vue-resourse获取json并应用到模板示例

    下面我为您讲解如何使用vue-resource获取JSON并应用到模板中。 1. 安装vue-resource 在开始之前,首先需要安装vue-resource。可以通过以下命令在命令行中安装: npm install vue-resource –save 2. 引入vue-resource 安装完成后,需要在Vue项目中引入vue-resource。可以…

    Vue 2023年5月28日
    00
  • Vue组件间通信方法总结(父子组件、兄弟组件及祖先后代组件间)

    Vue组件间通信方法总结 Vue组件通信是Vue开发者必须掌握的技能之一。本文将总结Vue中组件间通信的各种方法,包括父子组件、兄弟组件及祖先后代组件间通信。 父子组件通信 父子组件通信是Vue中最常见的通信方式。下面分别介绍组件间通信的几种方法。 Props 在Vue中父组件可以通过Props向子组件传递数据,子组件通过props选项接收父组件传递过来的数…

    Vue 2023年5月28日
    00
  • vue实现定时刷新数据,每隔5分钟执行一次

    这里是实现vue定时刷新数据的完整攻略: 步骤1:引入vue定时器插件 VueJS提供了vue-interval-plugin插件,可以轻松实现vue定时器功能。使用此插件,我们可以在Vue组件中轻松地开启一个计时器,定时执行某些方法(如定时刷新数据)。 首先,用npm或yarn安装此插件: npm install vue-interval-plugin 或…

    Vue 2023年5月29日
    00
  • vuex(vue状态管理)的特殊应用案例分享

    下面我给您详细讲解一下“Vuex(Vue状态管理)的特殊应用案例分享”的完整攻略。 什么是Vuex Vuex是Vue.js的状态管理模式和库,它可以将数据存储到一个全局的状态树中,并通过一个可预测的方式修改这些数据。Vuex主要解决了多个组件之间数据共享、组件通信等问题。 Vuex的使用场景 在Vuex中可以管理组件的状态,这些状态可以在组件之间共享,在开发…

    Vue 2023年5月27日
    00
  • 创建nuxt.js项目流程图解

    下面是创建nuxt.js项目的流程图解及攻略: 1. 创建新项目 首先,我们需要安装npx(npm 5.2+自带),并使用npx命令创建新项目。具体步骤如下: 打开命令行工具(Windows:cmd或PowerShell;Mac/Linux:Terminal)。 运行以下命令来安装npx: npm install -g npx 运行以下命令来创建新项目: n…

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