Vue 3 迁移策略笔记—— 第8节:Data 选项

前言

本笔记主要基于官方文档《迁移策略—— Data 选项》汇总而来。如有理解出入,请以官方文档为主。建议您以官方文档为主,本文为辅。这样您可以“以自己为主”审视的阅读,从而不被我的观点带偏。

概述

  • data选项的不再接受 JS 对象,只接受函数形式的声明。
  • 当合并来自 mixinextend 的多个 data 返回值时,data现在变为浅拷贝形式(只合并根级属性)。

Vue 2.x data Option 的声明

在 Vue 2.x ,声明data有两种方式:

  • 对象形式(常用于 Vue 根实例)

    const app = new Vue({
      data: {
        apiKey: 'a1b2c3'
      }
    })
    
  • 函数形式 (常用于 Vue 组件)

    const app = new Vue({
      data() {
        return {
          apiKey: 'a1b2c3'
        }
      }
    })
    

Vue 3.x 只支持函数形式声明

Vue 3.x 对 data的声明进行了标准化。现只接受函数形式的声明形式。

上面代码变成:

<script>
  import { createApp } from 'vue'

  createApp({
    data() {
      return {
        apiKey: 'a1b2c3'
      }
    }
  }).mount('#app')
</script>

Mixin 的改变

当组件的datamixinextendsdata进行合并时,Vue 3.x 只进行浅拷贝形式。

如下例子:

const Mixin = {
  data() {
    return {
      user: {
        name: 'Jack',
        id: 1
      },
      pwd: '123456'
    }
  }
}

const CompA = {
  mixins: [Mixin],
  data() {
    return {
      user: {
        id: 2
      },
      pwd: '121212'
    }
  }
}

Vue 2.x data执行的结果:

{
  user: {
    id: 2,
    name: 'Jack'
  },
  pwd: '121212'
}

Vue 2.x 中,data的合并是深拷贝形式。以ComAdata为主,Mixindata里的属性将逐一跟ComAdata里的属性比较。如果属性ComA data里存在的,且是对象,则进入对象内部进行比较;若不是对象,则跳过;如果属性在ComA data里不存在,则直接添加到ComA data

Vue 3.x data执行结果:

{
  user: {
    id: 2
  },
  pwd: '121212'
}

Vue 3.x 是浅拷贝,所以不会进入对象的内部进行比较。因此,但 Vue 发现user属性在ComAdata已经存在时,就直接跳过了。


本系列目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值