網頁上你常看到一些開關或切換分頁的方式,ANTD 裡也提供了兩種實用的 component 給我們選擇,分別是 Tabs 與 Segmented。Tabs 理所當然就是大家第一個印象中的那個分頁,就像在 Bootstrap 的 Navs and tabsTailwind 的 Default tabs 裡也有提供的那種 navbar 切換頁籤的效果。另外一個是大家可能比較少聽過的 Segmented,它在英文裡有部分、片段的意思,在 ANTD 官方文件中他們則稱它為分段控制器,我個人認為 Tabs 較適合用在頁面主要內容的切換上,而 Segmented 則在較小部分區塊的轉換會比較適當。

一、ANTD 的 Tabs

1. 最基本的使用方式:引用與呼叫它

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import { Tabs } from 'antd';

const App = () => (
<Tabs defaultActiveKey="1">
<Tabs.TabPane tab="分頁 1" key="1">
分頁 1 的內容...
</Tabs.TabPane>
<Tabs.TabPane tab="分頁 2" key="2">
分頁 2 的內容...
</Tabs.TabPane>
<Tabs.TabPane tab="分頁 3" key="3">
分頁 3 的內容...
</Tabs.TabPane>
</Tabs>
);

export default App;

2. Tabs 可添加的屬性

  在這個元件中,你可以把 Tab 這個 tag 理解為最外層的容器,裡面包數個 Tabs.TabPane 的 tag。下面列出幾項我開發最常用的,也可以點此連結去看更多官方 api 文件

屬性名稱 可以使用的值 說明
type line 或 card 或 editable-card 分頁標籤的主要樣式,分別是常見的下底線、卡片、可編輯卡片,默認是下底線唷!
activeKey 字串 當下顯示的分頁 key 值,要注意是字串!
defaultActiveKey 字串 預設一開始要選中的頁籤key值,要注意是字串!
tabBarStyle CSSProperties 額外要設定inline css樣式的話要用這個參數,不是style!
tabPosition top 或 right 或 bottom 或 left 分頁標籤要顯示的位置,個人覺得下方這個選項有點…,總之預設是常見的上方
onChange () => {} 就是function,如果有在切換頁籤時有額外需求,要使用這個參數呼叫

3. Tabs.TabPane 可添加的屬性

  下面列出幾項我開發最常用的,也可以點此連結去看更多官方 api 文件

屬性名稱 可以使用的值 說明
tab 字串 顯示在頁籤上面的文字
key 字串 每個頁籤的key值,要注意是字串!
disabled true 或 false 是否供點選,預設是false。用在判斷上很實用,例如某些身分不能點選某些分頁標籤的情形

4. ANTD 的 Tabs 實際使用範例

看完上面簡單的介紹後,下面提供我的一些簡單範例,若大家有興趣也可以到線上編輯器裡玩玩看唷!

https://ithelp.ithome.com.tw/upload/images/20221004/201409203EuDU3H6zb.png
先前專案元件應用示意圖

二、ANTD 的 Segmented

1. 最基本的使用方式:引用與呼叫它

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import { Tabs } from 'antd';

const data = [
{
label: '分頁一',
value: '分頁一',
},
{
label: '分頁二',
value: '分頁二',
},
]

const App = () => (
<div>
<Segmented
options={data}
onChange
/>
</div>
);

export default App;

2. Segmented 可添加的屬性

  其實這個元件我也是最近開發時第一次使用?,它比較有switch的樣式感,拿來做模式切換我覺得超級適合。這個元件提供的屬性本身就不多,下面列出幾項我有使用過的,也可以點此連結去看更多官方 api 文件

屬性名稱 可以使用的值 說明
options string[]number[]Array<{ label: ReactNode value: string icon? ReactNode disabled?: boolean className?: string }> 就是分頁標籤的內容,一定要是個陣列⭐(這個後面會再詳述)
size large 或 middle 或 small 就是尺寸,分別給予的高度是40px, 32px 和 24px。預設是middle。
onChange () => {} 就是function,在切換時要做的事件

3. Segmented 的 options 可以活用到什麼程度?

  因為在 Segmented 裡,選項的陣列可以使用多種方法讓呈現效果有所不同,甚至加上icon圖標讓頁面更豐富,所以這邊就特別拉出一小節並附帶範例跟大家介紹。

(1) 陣列裡直接放字串

1
const options = ['週一', '週二', '週三', '週四', '週五'];

(2) 陣列裡直接放數字

1
const options = [1, 2, 3, 4, 5];

(3) 陣列裡放object,並在內容前面加icon

https://ithelp.ithome.com.tw/upload/images/20221005/20140920GGLYSDsu59.png

1
2
3
4
5
6
7
8
9
10
11
12
const options = [
{
label: '字母由前往後排序',
value: 'front',
icon: <SortAscendingOutlined />,
},
{
label: '字母由後往前排序',
value: 'end',
icon: <SortDescendingOutlined />,
},
];

(4) 陣列裡放object,客製化想顯示的內容

https://ithelp.ithome.com.tw/upload/images/20221005/20140920MXCJiYt9df.png

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
const options = [
{
label: (
<div style={{ padding: 4 }}>
<LikeOutlined />
<div>按讚清單</div>
</div>
),
value: 'like',
},
{
label: (
<div style={{ padding: 4 }}>
<ShareAltOutlined />
<div>分享清單</div>
</div>
),
value: 'share',
},
{
label: (
<div style={{ padding: 4 }}>
<HeartOutlined />
<div>收藏清單</div>
</div>
),
value: 'save',
},
];

4. ANTD 的 Segmented 實際使用範例

看完上面簡單的介紹後,下面提供我的一些簡單範例,若大家有興趣也可以到線上編輯器裡玩玩看唷!

https://ithelp.ithome.com.tw/upload/images/20221005/20140920TcL2rzZUsa.png
先前專案元件應用示意圖

  看完上面的分享,應該有感受到ANTD元件的強大功能吧?比較常見的功能其實都在每個元件的參數中,可以輕鬆選擇與處理,今天的文章也是用心做了好多舉例與說明,覺得有幫助的話也可以按讚唷!