vue3组合式API基本使用

本文介绍了Vue.js中的核心概念,包括setup入口函数的使用方法及注意事项、API如ref、reactive等的功能与应用,以及watch和computed等响应式更新机制。

一、 setup入口函数

1 ) 注意:setup方法中this指向undefined(原因:setup函数在创建组件之前调用)

2 ) setup参数

  • props:组件接收过来的属性;
  • context:上下文对象

3 ) context对象属性

  • attrs:未使用props声明接收的属性
  • slots:获取插槽,content.slots.default() –> 获取默认插槽
  • emit:发送自定义事件
  • root
  • parent
  • refs

二、API使用

注意:每使用一个api需要先进行引入

  1. ref:将基础数据类型转换为响应式
<template>
	<!-- 在模板中取值 -->
	<div>{{foo}}</div>
	<!-- 在模板中调用方法并传值-->
	<div>{{fun(88)}}</div>
</template>
import {ref} from 'vue'
...
setup() {
	let foo = ref(1)
	let fun = (newVal) => {
		// 在方法中取值
		console.log(foo.value) // 1
		// 修改变量foo的值
		foo.value = newVal 
		console.log(foo.value) // 88
	}
	return {
		foo,
		fun
	}
}
  1. reactive:将对象转换为响应式
import {reactive} from 'vue'
...
setup() {
	let user = reactive({
		name: '张三',
		age: 18,
		sex: '男'
	})
	return {
		user
	}
}
  1. toRefs:将reactive声明的对象解构后依然保持响应式
<template>
	<!-- 直接写属性名进行取值 -->
	<div>{{name}}</div>
</template>
import {reactive,toRefs} from 'vue'
...
setup() {
	let user = reactive({
		name: '张三',
		age: 18,
		sex: '男'
	})
	return {
		...toRefs(user)
	}
}
  1. readonly:将reactive声明的响应式对象转换为非响应式(不常用)
let newUser = readonly(user) 
  1. isRef:判断变量是原始数据还是ref函数转换过的
import {isRef} from 'vue'
...
setup() {
	let num = 66
	let num2 = isRef(num) ? num.value : num
	console.log(num2) // 66
}
  1. computed
import {computed } from 'vue'
...
setup() {
	let user = {
		firstName: 'Michael',
		lastName: 'Jordan'
	}
	let fullName = computed(() => {
		return user.firstName + '' + user.lastName
	})
	return {
		fullName
	}
}
  1. watch
import { ref, watch } from 'vue'
...
setup() {
	let a = ref(1)
	let b = ref(2)
	// 监听单个值
	watch(a, (newVal,oldVal) => {
		cosole.log(a.value) // 1
	},{immediate:true}) //immediate:true 确认是否以当前的初始值执行handler函数
	// 监听多个值
	watch([a,b], ([newA,newB],[oldA,oldB]) => {
		cosole.log(newA + '-' + oldA) // 1-undefined
	},{immediate:true})
	return {
		a,
		b
	}
}
  1. 生命周期函数
  2. provide、inject
  3. useRouter、useRoute (从vue-router中引入)
  4. useStore (从vuex中引入)
<think>好的,我需要帮助用户了解如何在Vue 3组合式API使用mixin。首先,我应该回顾一下Vue 2中的mixin用法,然后对比Vue 3中的变化。根据引用[2],Vue 2中通过mixins数组来合并组件和mixin的选项,比如数据、方法等。但在Vue 3中,引入了Composition API,用户可能更倾向于使用组合函数而不是传统的mixin。 接下来,用户想知道如何在Composition API使用mixin。根据引用[4],Vue 3的全局API发生了变化,比如Vue.mixin变成了app.mixin。但Composition API推荐使用自定义组合函数来替代mixin,这样可以避免命名冲突和来源不明确的问题。例如,引用[3]提到Composition API允许灵活组合组件逻辑,所以应该引导用户使用setup函数和组合函数。 然后,我需要解释具体的步骤。首先,创建自定义mixin,可以是一个返回对象的函数,包含响应式数据和方法。然后在组件的setup函数中引入并展开这些属性。不过需要注意响应式数据的处理,使用ref或reactive。另外,如果用户确实需要使用传统的mixin,可以说明在Vue 3中仍然可以使用mixins选项,但更推荐组合函数。 最后,比较两种方式的优缺点,强调组合函数在可读性和维护性上的优势,并提醒兼容性注意事项。确保回答结构清晰,步骤明确,引用正确的资料,如引用[2]和[4]关于mixin的配置变化,引用[3]关于Composition API的优势。</think>在 Vue 3使用组合式 API 时,可以通过以下两种方式实现类似 Mixin 的功能: ### 一、推荐方式:使用组合函数替代 Mixin 1. **创建自定义组合函数** ```javascript // useMixinLogic.js import { ref } from &#39;vue&#39;; export default function useMixinLogic() { const sharedData = ref(&#39;共享数据&#39;); const sharedMethod = () => { console.log(&#39;来自组合函数的方法&#39;); }; return { sharedData, sharedMethod }; } ``` 2. **在组件中使用** ```javascript import { defineComponent } from &#39;vue&#39;; import useMixinLogic from &#39;./useMixinLogic&#39;; export default defineComponent({ setup() { const { sharedData, sharedMethod } = useMixinLogic(); // 本地逻辑 const localData = ref(&#39;本地数据&#39;); return { sharedData, sharedMethod, localData }; } }); ``` **优势**:更好的类型推断、清晰的来源追踪、避免命名冲突[^3][^4] ### 二、兼容方式:传统 Mixin 语法 ```javascript // 传统 Mixin export const myMixin = { data() { return { mixinData: &#39;Mixin 数据&#39; } }, methods: { mixinMethod() { console.log(&#39;来自 Mixin 的方法&#39;); } } } // 组件中使用 import { defineComponent } from &#39;vue&#39;; import { myMixin } from &#39;./myMixin&#39;; export default defineComponent({ mixins: [myMixin], setup() { // 可以通过 this 访问 Mixin 属性 console.log(this.mixinData); this.mixinMethod(); } }); ``` **注意**:需要配置`compilerOptions.compatConfig`兼容 Vue 2 写法 ### 三、两种方式对比 | 特性 | 组合函数 | 传统 Mixin | |-------------------|----------------|----------------| | 代码组织 | 显式导入 | 隐式合并 | | 命名冲突 | 可避免 | 可能发生 | | 类型支持 | 完善 | 有限 | | 逻辑复用粒度 | 函数级 | 对象级 | | 上下文访问 | 可控 | 自动合并 | ### 四、最佳实践建议 1. 优先使用组合函数实现逻辑复用 2. 需要兼容 Vue 2 项目时再使用传统 Mixin 3. 复杂场景可结合`provide/inject`实现跨层级复用 4. 使用 TypeScript 时组合函数能获得更好的类型提示
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值