vue数据初始化initState的实例详解

yizhihongxing

Vue数据初始化initState的实例详解

什么是initState

在Vue实例化过程中,initState是一个非常重要的方法。它负责初始化Vue实例的各种属性、数据和方法等,是Vue实例化的关键过程之一。

initState源码解析

Vue实例化过程的源码分析比较复杂,这里只讲述其中涉及到initState的部分。

function initState(vm: Component) {
  // ...
  initStateData(vm);
  // ...
}

function initStateData(vm: Component) {
  const data = vm.$options.data;
  data = vm._data = typeof data === 'function' ? getData(data, vm) : data || {};
  // ...
}

从上述代码片段中,我们可以看到以下几个关键点:

  • initStateData函数负责初始化Vue实例的 data 属性,如果有为方法则递归执行筛选后的结果。
  • 在执行完initState函数后,便会得到处理之后的vue实例对象。

实例1

接下来,我们通过一个具体的例子来理解initState的作用。

new Vue({
  data() {
    return {
      message: 'Hello World'
    }
  }
});

上述代码会创建一个新的Vue实例,并且实例对象上的_data属性会被赋值为:

{
  message: 'Hello World'
}

实例2

我们再来看一个含有computed属性的例子:

new Vue({
  data() {
    return {
      message: 'Hello World'
    }
  },
  computed: {
    reversedMessage() {
      return this.message.split('').reverse().join('')
    }
  }
});

上述代码会创建一个新的Vue实例,并且实例对象上的_data属性会被赋值为:

{
  message: 'Hello World'
}

实例对象上的_computedWatchers属性会被赋值为:

{
  reversedMessage: {
    getter: /*此处省略*/,
    value:/*此处省略*/,
    vm: /*此处省略*/
  }
}

经过initState函数的处理,我们可以看到Vue实例对象上的_data属性和_computedWatchers属性都得到了正确的初始化。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue数据初始化initState的实例详解 - Python技术站

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

相关文章

  • 解决Vue+Electron下Vuex的Dispatch没有效果问题

    解决 Vue+Electron 下 Vuex 的 Dispatch 没有效果问题 问题描述: 在使用 Vue+Electron 构建桌面应用程序时,可能会遇到 Vuex 的 Dispatch 方法无法正常触发 Action 的问题。例如下面的代码: // 在 Vue 组件中的方法里调用 Action,但没有效果 this.$store.dispatch(‘g…

    Vue 2023年5月28日
    00
  • vue实现把接口单独存放在一个文件方式

    在Vue项目中,我们可以将接口单独存放在一个文件中,以便于统一管理和维护,提高开发效率。以下是详细攻略: 1. 创建接口配置文件 在项目中创建一个api目录,用于存放所有接口配置文件。在api目录下新建一个文件,如 index.js。示例代码: import axios from ‘axios’ const service = axios.create({ …

    Vue 2023年5月28日
    00
  • vue中如何进行异步请求

    当在Vue.js应用程序中进行异步请求时,Vue.js使我们能够使用它在“vue-resource”和“axios”两个包中提供的两种不同方式。这两种方式都可以很容易地在Vue.js中创建和使用XHR请求。现在,我们来看一下如何使用这两种方式进行异步请求。 使用vue-resource进行异步请求 步骤一:安装vue-resource 在Vue.js项目中使…

    Vue 2023年5月29日
    00
  • vue 中filter的多种用法

    下面是一份关于 Vue 中 filter 的多种用法的攻略。 简介 在 Vue 中,filter 是一种非常实用的功能,它可以让我们在模板中格式化数据。例如,在展示日期时,可以使用 Date Filter 将日期格式化为固定的格式,或者在展示价格时,可以使用 Currency Filter 将价格格式化为指定的货币单位。 Vue 中 Filter 的基本用法…

    Vue 2023年5月27日
    00
  • Vue3.0利用vue-grid-layout插件实现拖拽布局

    下面我将详细讲解“Vue3.0利用vue-grid-layout插件实现拖拽布局”的完整攻略。 什么是vue-grid-layout插件? vue-grid-layout插件是一个基于Vue.js的实现可拖拽和可调整大小的网格布局的插件。它提供了一个理想的网格系统,具有最小的劳动力和最小的障碍。在Vue3.0版本中使用vue-grid-layout插件可以快…

    Vue 2023年5月29日
    00
  • 浅析vue深复制

    浅析vue深复制 什么是深复制 在编程中,复制一个对象并不是简单地复制原先的地址,而是将原对象的所有数据都复制到一个新的内存地址中,我们称之为复制对象。当我们在拷贝一个对象的时候,有可能会遇到”浅复制”和”深复制”。 浅复制:复制对象时,指向某个指针的指针只能复制指针的值,而不能复制所指向的对象。因此,当我们改变所指向对象的内容时,指针也会发生相应的变化。 …

    Vue 2023年5月28日
    00
  • vue 扩展现有组件的操作

    扩展 Vue 组件是指在已有的组件基础上进行自定义修改,以适应不同的业务需求。下面我将分享我们常用的几种扩展组件的方法。 1. 使用 mixins Mixins 是 Vue 中的一个实用工具,用于复用 Vue 组件中的一些常用逻辑。使用 mixins 可以将一些重复的代码抽离到单独的文件中,再通过导入和混入的方式来扩展组件。 使用 mixins 可以扩展已有…

    Vue 2023年5月28日
    00
  • Vue声明式导航与编程式导航及导航守卫和axios拦截器全面详细讲解

    好的。首先,我们来详细讲解Vue的声明式导航与编程式导航。 Vue声明式导航与编程式导航 Vue Router 提供了两种导航方式:声明式导航和编程式导航。 声明式导航 声明式导航是通过在模板中使用 <router-link> 组件来进行导航的。例如: <router-link to="/home">Home&lt…

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