【Vue3中setup语法糖下常用API使用方法】

defineProps 、 defineEmits、defineExpose 都是只在 setup语法糖 中才能使用的编译器宏。他们不需要导入是直接可用的

一、Props父 >> 子组件传递,使用defineProps
// Parent.vue
<tempalte>
	<Child :data="toChild" />
</template>

<script setup>
	const toChild = reactive({
		msg: 'hello composition'
	})
</script>
// Child.vue
<script setup>
	const props = defineProps({
		data: {
			msg: String
		}
	})
</script>
二、Emit子 >> 父组件传递,使用defineEmits
// Parent.vue
<tempalte>
	<Child @toParent="emitChange" />
</template>

<script setup>
	const emitChange = (data) => {console.log(data)}
</script>
// Child.vue
<tempalte>
	<button @click="pushMsg">发送</button>
</template>

<script setup>
	const emits = defineEmits(['toParent'])
	const pushMsg = () => {
		emits('toParent', '来自child的问候')
	}
</script>
三、defineExpose
使用setup语法糖,组件是默认关闭的,父组件无法通过ref和$parent获取到组件的组件的公开实例,为了在setup语法糖下明确要暴露出去的属性,使用defineExpose编译器宏
// Parent.vue
<tempalte>
	<Child ref="getChild" />
</template>

<script setup>
	import {ref, onMounted} from 'vue'
	const getChild = ref(null)
	onMounted(() => {
		gteChild.value.helloParent()
	})
</script>
// Child.vue
<script setup>
	const helloParent = () => {
		console.log('child')
	}
	defineExpose({helloParent})
</script>
四、Provide/Inject
// Parent.vue
<script setup>
	import {reactive, provide} from 'vue'
	const content = reactive({
		msg: '来自祖辈的轻抚'
	})
	provide('fromParent', content)
</script>
// 子组件或孙组件
<script setup>
	import {inject} from 'vue'
	const content = inject('fromParent')
</script>
五、异步组件

异步组件下父组件无法通过ref获取子组件实例,(T-T),困扰许久

// Parent.vue
<tempalte>
	<Child />
	<Child2 />
</template>

<script setup>
	import { defineAsyncComponent } from 'vue'
	import ErrorComponent from './components/ErrorComponent.vue'
	import LoadingComponent from './components/LoadingComponent.vue'
	
	// 不带选项的异步组件
	const Child = defineAsyncComponent(() => import('./Child.vue'))
	
	// 带选项的异步组件
	const Child2 = defineAsyncComponent({
	  loader: () => import('./Child2.vue'), // 需要加载的组件
	  delay: 200, // 展示加载时组件的延时时间。默认值是 200 (毫秒)
	  timeout: 3000, // 超时时间,如果提供了超时时间且组件加载也超时了,则使用失败组件
	  errorComponent: ErrorComponent, // 加载失败时使用的组件
	  loadingComponent: LoadingComponent // 异步组件加载时使用的组件
	})
		
</script>
六、useSlots和useAttrs
<script setup>
	import { useSlots, useAttrs } from 'vue'
	
	const slots = useSlots()
	const attrs = useAttrs()
</script>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值