コンテンツへスキップ
Fumadocs

Tabs

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 を指定しない場合は、子要素のインデックスから判別されます。再レンダリング時にエラーが発生する可能性があるため、タブが変化しうる場合は推奨されません。

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 を指定します。値は グループ ID をストレージキーとして localStorage に保存されます。

<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?

最終更新日