vue——组合API和响应API

一、什么是组合API

组合API是一个基于函数的API,同时API也可以和现有的、基于选项的API一起使用,不过需要特别注意的是,组合API会在选项(datacomputedmethods)之前解析,所以组合API是无法访问这些选项中的定义的属性的。

setup()函数

组合API是vue的核心功能,我们所用的组合API的数据和功能一般都写在setup()函数中如下代码所示

export default {
  name:'App',
  setup() {
    //数据
    let name = '张三'
    let age = 18
    let job = {
      type: '前端工程师',
      salary: '30k',
      a: {
        b: {
          c: 666
        }
      }
    }
    let hobby = ['抽烟', '喝酒', '烫头']

function changeInfo() {
      name = '李四'
      age = 48
      job.type = 'UI设计师'
      job.salary = '60k'
      job.a.b.c = 999
      hobby[0] = '学习'

 return {
      name,
      age,
      job,
      hobby
      }
  }

在这串我们所写的代码中,changeInfo()是我们写的测试方法,以及我们所要返回的数据都可以写在setup()(温馨提示:代码只是示例,changeInfo()并不能运行成功,下文会说明如何运行)

二、响应式API

1.ref()函数和reactive()函数

上述代码中changeInfo()并不能成功运行,上述代码运行结果如下:

在这里插入图片描述
点击修改信息按钮,信息并不能修改,此时就需要就需要用ref()函数,以及reactive()函数来获取数据
下列代码便是使用ref()reactive()来进行数据修改

<script>
import {ref,reactive} from 'vue';
export default {
  name:'App',
  setup() {
    //数据
    let name = ref('张三')
    let age = ref(18)
    let job = reactive({
      type: '前端工程师',
      salary: '30k',
      a: {
        b: {
          c: 666
        }
      }
    })
    let hobby = reactive(['抽烟', '喝酒', '烫头'])
    
    //方法
    function changeInfo() {
      name.value = '李四'
      age.value = 48
      job.type = 'UI设计师'
      job.salary = '60k'
      job.a.b.c = 999
      console.log(name, age)
      hobby[0] = '学习'
    }

    return {
      name,
      age,
      job,
      hobby,
      changeInfo
    }
  }

}
</script>

运行结果如下
在这里插入图片描述
此时已经运行成功了,点击按钮,数据可以成功修改

2.ref()的用法:

ref()负责将基本数据类型的数据封装成响应式数据,一般基本数据类型包括

  • String
  • Number
  • Boolean
  • Bigint
  • Symbol
  • Undefined
  • Null

ref()负责接收上述类型的数值返回一个响应式且可变的ref()对象。若要获取其中的值,需要访问对象的.value属性

3.reactive()用法

Vue的reactive()方法通过接收一个对象,返回对象的响应式副本

  • 作用:定义一个对象类型的响应式数据(基本类型不要用它,要用ref()函数)
  • 语法:const 代理对象 = reactive(源对象),接收一个对象或数组,返回一个代理对象(proxy的实例对象,简称proxy对象)
  • reactive定义的响应式数据是深层次的
  • 内部基于ES6的proxy实现,通过代理对象操作源对象内部数据进行操作

上述代码中,我们截取这两段进行讲解

let job = reactive({
      type: '前端工程师',
      salary: '30k',
      a: {
        b: {
          c: 666
        }
      }
    })
    let hobby = reactive(['抽烟', '喝酒', '烫头'])
    
    //方法
    function changeInfo() {
      job.type = 'UI设计师'
      job.salary = '60k'
      job.a.b.c = 999
      console.log(name, age)
      hobby[0] = '学习'
    }

代码中job是一个对象,hobby是一个数组,都可以使用reactive()函数进行接收源对象中的数据,使用完reactive()函数进行接收数据后,这时job和hobby都相当于代理对象(proxy对象),这时可以对源代码数据进行直接操作,如代码中changeInfo()方法中所示

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LD白哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值