Vue的组合式

1. 概念

选项式API:将相同类型的代码放在一起(比如所有数据、所有用到的方法等等)当代码业务板块过多时,不方便写代码和后期维护

组合式API:将同一业务的相关代码放在一起(比如说数据,方法,计算属性等等)结构更清晰,容易维护。

两个模式可以混合使用。

实现:在setup钩子函数中写代码,return的对象在vue3中被this代理(相当于this对象将return的对象里面的成员全部劫持了,并放在了自己的对象中)。由此可知,对象里面的成员就可以在模板中使用。但return的对象不是this对象,它不是响应式对象。

这样写代码我们发现,每次需要使用到的数据必须要return出去,组件才可以使用,就比较容易忘记return出来,且比较麻烦,那官方就提供了一个语法糖:<script setup></script >来解放程序员。

2. 组件注册和使用

1. 注册:同步引入或异步引入

<script setup>
import Box2 from './Box2.vue'
let Box3 = defineAsyncComponent(()=>import(./Box3.vue)
</script>

2. 使用:和选项式一样,直接当标签使用

3. 响应式数据——ref和reactive

在概念中提到的了,组合式API不是响应式数据,也就是说它的改变不可以驱动页面刷新,为了实现数据驱动页面,就需要将其变成响应式数据。vue官方提供了ref和reactive来实现这个功能。其中,ref一般用来将普通基本数据变成响应式数据对象,需要通过.value来取得值;reactive一般是将普通对象变成响应式对象,需要从vue中先引入ref和reactive,下面通过简单案例来理解。

普通数据类型:使用ref包裹字符,结果为对象,所以需要用.value来取值

<h2>box组件---{{ msg }}</h2>
<button @click="change1">btn1</button>

import { ref,reactive } from "vue"
let msg = ref("hello");
let change1 = () => {
    msg.value = "newValue";
    console.log(msg);
};

 引用数据类型——对象和数组。不需要用.vaule来访问,直接可以访问对象的成员。

<div> {{ obj.name }}----{{ obj.age }} </div>
<button v-on:click="change_obj">change_obj</button>
<button v-on:click="load">load</button>

// 对象
let obj = reactive({ name: 'jjj', age: 13 });
let change_obj = () => {
    obj.name = 'mmm';
}
// 数组
let arr = reactive([]);
let load = () => {
    let data = { name: 'jjj', age: 13 };
    arr.push(data);
    console.log(arr);
}

4. 计算属性——computed

引入:import { computed } from "vue"

使用:computed(写函数) 不用调用,用到的数据改变时,会自运行。

例如:

// 当arr数据改变 就会自运行该函数 驱动页面显示
let total = computed(() => {
    console.log('方法');
    return arr.reduce((n1, n2) => {
        return n1 + n2.price * n2.count
    }, 0)
})

5. 侦听器——watch

引入:import { watch} from "vue"

使用:watch(属性名,(newvalue,oldvalue)=>{ 一些操作 }) 。回调函数中的两个参数分别为属性改变后的值和改变前的值。

6. 生命周期函数

引入:import { onMounted,onBeforeUpdate,onUnmounted } from "vue"

注:

  • 引入生命周期函数时,要加on;
  • setup钩子可以直接代替beforeCreate和created
  • 一个生命周期函数可以写多次,通过返回对象来实现了更为灵活的逻辑组合和复用,都是页面首次加载,都只挂载一次,只是调用了两个函数;但选项式里面只能写一次,因为选项式里面的各个选项是直接声明在组件的选项中的。每次进行组件挂载的时,Vue 会通过这些选项来为组件实例添加对应的方法和数据。

7. 自定义属性与事件

前面学习的选项式API中,自定义属性需要注册才能使用,自定义事件不需要;但组合式API中自定义属性和自定义事件都需要注册才能使用。

引入:import { defineProps, defineEmits } from 'vue'

           注册属性——defineProps(["title", "x"]);

           注册事件——let emit = defineEmits(["myevent"]);

使用:属性跟选项式用法一样——:自定义属性名="变量名"

            自定义事件——父组件绑定事件,子组件触发事件。例:

// 父组件中
<Box2 :title="msg" x="text" @myevent="fn"></Box2>

// 绑定自定义事件
let fn = (arg) => {
    // arg为子组件触发事件时传过来的信息
    console.log(arg);
}

//子组件Box2中
<h2>box2组件---{{ title }}---{{ x }}</h2>
<button @click="fn">btn</button>

let emit = defineEmits(["myevent"]);
let n = 0;
// 触发事件 单击三次触发
let fn = () => {
    n++;
    if (n % 3 == 0) {
        emit("myevent", "传参")
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值