---
# System prepended metadata

title: LearnSidebarSubject.jsx
tags: [N108 Component]

---

---
tags: N108 Component
---
# LearnSidebarSubject.jsx
- component 切換流程圖 *(原本 component 名稱把 Learn 去掉)*
- 可以配合 PPT 14頁
```graphviz
digraph Pageswitch {
                nodesep=0.8
                node [color=orange, fontsize=22, shape=box, style=bold]
                edge [color=RosyBrown, style=dashed]
                Learn->{Sidebar Content YtFlame}
                Sidebar->{SidebarSubject SiderbarContent}
                YtFlame->{Thumbnails}
                SidebarSubject [color=orange, fontsize=22, shape=box,style=filled, fillcolor=Bisque]
}
```
## 獨立 function
| 名稱 | 描述 | async 是否 |
|:--|:--|:--|
|subjectBtn()|傳入 data, choosedomainIndex, Set_sidebarValue，設定成 4 個科目 div button|否|
### subjectBtn()
- new 一個 array 裝 html
- 整個 `data` 為該學校類別有的科目
- 當科目列表 data index 中，跟目前點選一樣的科目 div Css 要多 + ``"edu-selectorange "``
- ex: data.length = 4，i = 0 ~ 3，目前點選到 1，data[1] 的那個 div Css 就會多 ``"edu-selectorange "``
```jsx=5
let content = []
for (let i = 0; i < data.length; i++) {
    content.push(
        <div
            className={`${choosedomainIndex != i ? "" : "edu-selectorange "}subject mouse`}
            key={data[i].PID}
            onClick={(e) => Set_sidebarValue(data[i].PID, i)}
        >
            {data[i].Sub}
        </div>
    )
}
return content
```
## render
### props (上層傳入) 參數介紹
| 名稱 | 類型 | 描述 |
| :------ | :----------- | :----------- |
| `data` | <font color='Gold'>json value</font> | API 傳回的資料，包含：CCID、PID、school、Sub|
| `choosedomainIndex` | <font color='Salmon'>int</font> | 科目對應 ID|
|`Set_sidebarValue`|<font color='Green'>function</font>|傳 sidebar 相對應的主題 ID 與 sidebar 科目相對應的 ID，給上層 Learn.jsx 更新資料|
### return
- 直接 Call this.subjectBtn()
```jsx=24
<ul className="domain dis-center2">
    {this.subjectBtn(data, choosedomainIndex, Set_sidebarValue)}
</ul>
```
[回上層 LearnSidebar.jsx](https://hackmd.io/C3O6Rrh5Sv2BtYRKJrKY-A?view)