iT邦幫忙

2022 iThome 鐵人賽

DAY 19
1
自我挑戰組

那些年我用 Ant Design 做過的網頁元件系列 第 19

Day19:Ant Design 不再單調的分頁(Tabs與Segmented)

  • 分享至 

  • xImage
  •  

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

一、ANTD 的 Tabs

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

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. 最基本的使用方式:引用與呼叫它

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) 陣列裡直接放字串

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

(2) 陣列裡直接放數字

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

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

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

const options = [
    {
        label: '字母由前往後排序',
        value: 'front',
        icon: <SortAscendingOutlined />,
    },
    {
        label: '字母由後往前排序',
        value: 'end',
        icon: <SortDescendingOutlined />,
    },
];

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

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

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元件的強大功能吧?比較常見的功能其實都在每個元件的參數中,可以輕鬆選擇與處理,今天的文章也是用心做了好多舉例與說明,覺得有幫助的話也可以按讚唷!


上一篇
Day18:Ant Design 超實用的 Badge
下一篇
Day20:Ant Design 的 Avatar
系列文
那些年我用 Ant Design 做過的網頁元件30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
kk00915
iT邦新手 4 級 ‧ 2022-10-18 10:14:54

已按讚訂閱開啟小鈴鐺(?)

我要留言

立即登入留言