Vue3的组合式API是什么?

Vue3的组合式API将原来的“方法”式API转变为“函数”式API,核心是setup函数。在示例中,展示了如何使用reactive创建响应式对象,toRefs转换属性,以及如何定义计算属性和watch监听器。计算属性以函数形式返回,watch用于监听属性变化并执行回调。
摘要由CSDN通过智能技术生成

Vue3的组合式API,简单来说,就是将原来的“方法”式API,变成了“函数”式API。

你只需要把原来的methods,直接塞到setup里面即可,是不是很简单?

但是要注意,组合式API跟传统的template-based API是有冲突的,所以Vue3默认情况下是禁止同时使用两种API的,如果你硬要同时使用,会抛出一个错误。

现在我们开始正式介绍Vue3的组合式API。

首先是setup函数,这个函数是整个组合式API的核心,所有的逻辑都应该在这个函数里面实现。

<template>  
  <div>  
    <p>{{ message }}</p>  
    <button @click="increment">Increment</button>  
  </div>  
</template>  
  
<script>  
import { reactive, toRefs } from 'vue';  
  
export default {  
  setup() {  
    const state = reactive({  
      count: 0,  
      message: 'Hello Vue3!',  
    });  
  
    const increment = () => {  
      state.count++;  
    };  
  
    const message = toRefs(state.message);  
    const count = toRefs(state.count);  
  
    return {  
      message, // 可以直接在模板中使用message变量  
      count, // 可以直接在模板中使用count变量  
      increment, // 可以直接在模板中使用increment函数  
    };  
  },  
};  
</script>

上面的代码中,我们使用了reactive函数来创建一个响应式对象,这个对象包含了count和message两个属性。然后我们通过toRefs函数将这两个属性转换成普通的变量,这样就可以在模板中直接使用了。最后,我们将这三个变量以及一个函数一起返回,这样就可以在模板中直接使用了。是不是很简单?

再来看看计算属性应该如何实现。在组合式API中,计算属性需要作为一个函数返回,而不是像template-based API那样直接在methods中定义。这个函数的返回值就是计算属性的值。

<template>  
  <div>  
    <p>{{ message }}</p>  
    <button @click="increment">Increment</button>  
    <p>{{ reversedMessage }}</p>  
  </div>  
</template>  
  
<script>  
import { reactive, toRefs } from 'vue';  
  
export default {  
  setup() {  
    const state = reactive({  
      count: 0,  
      message: 'Hello Vue3!',  
    });  
  
    const increment = () => {  
      state.count++;  
    };  
  
    const reversedMessage = () => {  
      return state.message.split('').reverse().join('');  
    };  
  
    const message = toRefs(state.message);  
    const count = toRefs(state.count);  
    const reversedMessageRefs = toRefs(reversedMessage()); // 注意这里需要使用toRefs将函数转换成普通变量才能使用!否则会报错!  
  
    return {  
      message, // 可以直接在模板中使用message变量  
      count, // 可以直接在模板中使用count变量  
      reversedMessageRefs,
increment,
	};
  },
};
</script>

上面的代码中,我们定义了一个reversedMessage函数作为计算属性。这个函数会返回message属性的反向字符串。注意到我们在使用toRefs函数将reversedMessage函数转换成普通变量的时候,需要传入函数的返回值,而不是函数本身。否则会报错。

接下来是watch监听器的实现。在组合式API中,我们需要使用watch函数来监听某个属性的变化。当属性值发生变化时,watch函数中定义的回调函数会被触发。

<template>  
  <div>  
    <p>{{ message }}</p>  
    <button @click="increment">Increment</button>  
    <p>{{ reversedMessage }}</p>  
  </div>  
</template>  
  
<script>  
import { reactive, toRefs } from 'vue';  
  
export default {  
  setup() {  
    const state = reactive({  
      count: 0,  
      message: 'Hello Vue3!',  
    });  
  
    const increment = () => {  
      state.count++;  
    };  
  
    const reversedMessage = () => {  
      return state.message.split('').reverse().join('');  
    };  
  
    const { message, count, reversedMessageRefs, increment } = watch(() => {  
      console.log('message changed!');  
      return { message, count };  
    }, newVal => {  
      console.log('message:', newVal.message);  
      console.log('count:', newVal.count);  
    });  
  
    return {  
      message, // 可以直接在模板中使用message变量  
      count, // 可以直接在模板中使用count变量  
      reversedMessageRefs, // 可以直接在模板中使用reversedMessage变量(注意这里需要使用reversedMessageRefs而不是reversedMessage)!注意这里需要使用toRefs将函数转换成普通变量才能使用!否则会报错!  
      increment, // 可以直接在模板中使用increment函数  
    };  
  },  
};  
</script>

上面的代码中,我们使用了watch函数来监听message属性的变化。当message属性发生变化时,回调函数会被触发。回调函数的第一个参数是一个函数,这个函数会返回我们需要监听的值。在这个例子中,我们返回了message属性。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

心悦蛋糕

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

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

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

打赏作者

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

抵扣说明:

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

余额充值