# defineExpose使用
# 遇到问题
当在Vue3中使用setup语法糖后,父组件无法通过ref获取子组件实例的数据、方法等
# 解决方案
可以在子组件中通过defineExpose将子组件的数据暴露出去已供父组件使用
<script setup lang="ts">
// 子组件 SkuForm.vue
// 获取sku所需要的数据
const getSkuData = async (c1Id: number, c2Id: number, spuItem: I_SPU_OBJ) => {
// 收集数据
skuParams.category3Id = spuItem.category3Id
skuParams.spuId = spuItem.id as number
skuParams.tmId = spuItem.tmId
// 获取平台属性
const attrRes = await reqGetAttr(c1Id, c2Id, spuItem.category3Id as number)
// 获取对应的照片墙
const imgRes = await reqGetSpuImageList(spuItem.id as number)
// 获取对应的销售属性
const saleRes = await reqGetSpuSaleAttr(spuItem.id as number)
// 存储
attrList.value = attrRes.data
saleList.value = saleRes.data
imgList.value = imgRes.data
}
// 通过defineExpose将函数暴露出去
defineExpose({
getSkuData,
})
</script>
<script setup lang="ts">
// 父组件 index.vue
const skuFormRef = ref<any>() // SkuForm组件实例
skuFormRef.value.getSkuData(c1Id as number, c2Id as number, spuItem) // 直接调用
</script>
# 扩展
可以通过defineExpose实现父子传参的功能