这篇文章是关于近期【监测用物联网提升智能传感器和系统软件开发】项目中,我在其中摸鱼凑数日子里积攒下来的系列文章二:vue3&JSX 插槽使用指南, 记录在jsx
和一般情况下 声明插槽、使用插槽、插槽传值 的笔记。
技术栈: vue3.x
+TS(X)
+Arco Design
一般插槽声明与使用
声明插槽与传值
// 子组件:detailModel
<div>
<slot :state="{a: 1}">default</slot>
<slot :list="[1,2,3]">list</slot>
</div>
使用插槽
<detailModel>
<template #default = {state}>
default {{state}}
</template>
<template #list={list}>
list {{list}}
</template>
</detailModel>
jsx插槽 【传值】声明与使用
声明插槽与传值
// 子组件:detailModel
<script lang="tsx">
import {defineComponent, reactive} from "vue";
export default defineComponent({
setup(props, context) {
const state = reactive({a: 1})
const list = reactive([1,2,3])
return () => (
<a-modal visible={true}>
// 声明默认插槽 并传值,不传值为context.slots.default()
<div>{context.slots.default && context.slots.default({state: state})}</div>
// 声明名称为list的插槽 并传值,不传值为context.slots.list()
<div>{context.slots.list && context.slots.list({list: list})}</div>
</a-modal>
)
}
})
</script>
jsx使用插槽
// 父组件调用detailModel子组件
<script lang="tsx">
import {defineComponent, reactive} from "vue";
export default defineComponent({
setup() {
const modalData = reactive({
detailVisible: true
})
// 使用插槽
const slots = {
default: (state) => (
console.log(state)
),
list: (list) => (
console.log(list)
)
}
return () => (
<>
// 引用组件, 使用插槽:v-slots={slots}
{modalData.detailVisible && <detailModel v-slots={slots}/>}
</>
);
}
})
</script>