---
tags: Mike課程
---
# 組件資料傳遞 實戰
1. 先將要定義傳遞到每個組件的資料寫入最上層(例如 app.vue)頁面中。
```javascript=
setup() {
// 開關 class 按鈕
const isOpen = ref(true);
// 點擊後切換開關
const HandListShow = () => {
isOpen.value = !isOpen.value;
};
return { isOpen, HandListShow };
},
```
2. 將變數傳入組件中
```htmlembedded=
<template>
<TitleBar :HandListShow="HandListShow" />
<ListItem :isOpen="isOpen" />
</template>
```
3. 子組件接收並傳入 HTML使用
```javascript=
export default {
// 子組件接收
props: {
isOpen: {
type: Boolean,
default: true,
},
},
setup(props) {
const listArr = reactive([
{ name: "2020 Vue3 專業職人 | 入門篇" },
{ name: "2020 Vue3 專業職人 | 加值篇" },
{ name: "2020 Vue3 專業職人 | 進階篇" },
{ name: "現代 JavaScript 職人之路|入門篇" },
{ name: "現代 JavaScript 職人之路|中階實戰篇" },
]);
return {
listArr,
props,
};
},
};
```
```htmlembedded=
<template>
<!-- props.isOpen 傳遞變數使用 -->
<ul :class="['box', { open: props.isOpen }]">
<li v-for="(list, idx) in listArr" :key="list.name">
{{ idx + 1 }}. {{ list.name }}
</li>
</ul>
</template>
```
4. 點擊事件組件接收
```javascript=
<script>
export default {
props: {
HandListShow: {
type: Function,
default: () => {},
},
},
setup(props) {
return { props };
},
};
</script>
```
* 傳入HTML模板以變數使用
```htmlembedded=
<template>
<a class="title" @click="props.HandListShow">課程列表</a>
</template>
```