跳至內容
Fumadocs

頁籤

以 Base UI 打造的 Tabs 元件,並提供持久保存、共用值等額外功能。

Hello World in Javascript
Value is shared! Try refresh and see if the value is persisted

Install to your codebase

Easier customization & control.

npx @fumadocs/cli@latest add tabs

使用方式

加入 MDX 元件。

components/mdx.tsx
import defaultMdxComponents from 'fumadocs-ui/mdx';
import * as TabsComponents from 'fumadocs-ui/components/tabs';
import type { MDXComponents } from 'mdx/types';

export function getMDXComponents(components?: MDXComponents) {
  return {
    ...defaultMdxComponents,
    ...TabsComponents, 
    ...components,
  } satisfies MDXComponents;
}

接著即可在 MDX 內容中使用:

content.mdx
<Tabs items={['Javascript', 'Rust']}>
  <Tab value="Javascript">Javascript is weird</Tab>
  <Tab value="Rust">Rust is fast</Tab>
</Tabs>
Javascript 很奇怪

不使用 value

若未提供 value,會依據 children 的索引來判斷。請注意,這可能會在重新算繪時導致錯誤;若頁籤可能會變動,則不建議採用此方式。

import { Tab, Tabs } from 'fumadocs-ui/components/tabs';

<Tabs items={['Javascript', 'Rust']}>
  <Tab>Javascript is weird</Tab>
  <Tab>Rust is fast</Tab>
</Tabs>
Javascript 很古怪

共用值

只要傳入 groupId 屬性,即可讓所有 id 相同的頁籤共用同一個值。

<Tabs groupId="language" items={['Javascript', 'Rust']}>
  <Tab value="Javascript">Javascript is weird</Tab>
  <Tab value="Rust">Rust is fast</Tab>
</Tabs>

持久保存

指定 groupId 時,選取的值會暫時儲存在 sessionStorage 中。

若要持久保存該值,您可以指定 persist prop。該值會 儲存在 localStorage 中,並以群組 ID 作為儲存鍵。

<Tabs groupId="language" items={['Javascript', 'Rust']} persist>
  <Tab value="Javascript">Javascript is weird</Tab>
  <Tab value="Rust">Rust is fast</Tab>
</Tabs>

預設值

您可以傳入 defaultIndex 來設定預設值。

<Tabs items={['Javascript', 'Rust']} defaultIndex={1}>
  <Tab value="Javascript">Javascript is weird</Tab>
  <Tab value="Rust">Rust is fast</Tab>
</Tabs>

使用 HTML 的 id 屬性即可連結至特定頁籤。

<Tabs items={['Javascript', 'Rust', 'C++']}>
  <Tab value="Javascript">Javascript is weird</Tab>
  <Tab value="Rust">Rust is fast</Tab>
  <Tab id="tab-cpp" value="C++">
    `Hello World`
  </Tab>
</Tabs>

您可以在 URL 加上雜湊 #tab-cpp 並重新載入頁面,即可啟用 C++ 頁籤。

Javascript 很古怪

此外,您可以在 Tabs 元件中將 updateAnchor 屬性設為 true, 讓每次選取新頁籤時自動更新 URL 雜湊:

<Tabs items={['Javascript', 'Rust', 'C++']} updateAnchor>
  <Tab id="tab-js" value="Javascript">
    Javascript is weird
  </Tab>
  <Tab id="tab-rs" value="Rust">
    Rust is fast
  </Tab>
  <Tab id="tab-cpp" value="C++">
    `Hello World`
  </Tab>
</Tabs>

哈囉!

進階用法

您也可以直接以底層方式使用:

<Tabs defaultValue="npm">
  <TabsList>
    <TabsTrigger value="npm">
      <NpmIcon />
      npm
    </TabsTrigger>
  </TabsList>
  <TabsContent value="npm">Hello World</TabsContent>
</Tabs>
Hello World

How is this guide?

最後更新於