Fumadocs

标签

一个使用 Radix UI 构建的标签页组件,具有诸如以下的附加功能 persistent and shared value.

Hello World in Javascript
Hello World in Rust
Also works if items are not the same
Value is shared! Try refresh and see if the value is persisted
Value is shared! Try refresh and see if the value is persisted

Install to your codebase

Easier customisation & control.

使用

🌐 Usage

添加 MDX 组件。

🌐 Add MDX components.

mdx-components.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): MDXComponents {
  return {
    ...defaultMdxComponents,
    ...TabsComponents,
    ...components,
  };
}

并在你的 MDX 内容中使用它:

🌐 And use it in your MDX content:

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

没有 value

🌐 Without value

如果没有 value,它会从子索引中检测。请注意,如果标签可能会变化,它可能会在重新渲染时导致错误,因此不推荐使用。

🌐 Without a value, it detects from the children index. Note that it might cause errors on re-renders, it's not encouraged if the tabs might change.

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

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

共享价值

🌐 Shared Value

通过传递 groupId 属性,你可以在所有具有相同 ID 的标签页之间共享一个值。

🌐 By passing an groupId property, you can share a value across all tabs with the same id.

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

持久的

🌐 Persistent

当指定 groupId 时,它们的值会被临时存储在 sessionStorage 中。

🌐 When groupId is specified, their value will be temporarily stored in sessionStorage.

要保存该值,你可以指定一个 persist 属性。该值将存储在 localStorage 中,并以其组 ID 作为存储键。

🌐 To persist the value, you can specify a persist prop. The value will be stored in localStorage, with its group ID as storage key.

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

默认值

🌐 Default Value

通过传递 defaultIndex 设置默认值。

🌐 Set a default value by passing defaultIndex.

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

🌐 Link to Tab

使用 HTML id 属性链接到特定标签页。

🌐 Use HTML id attribute to link to a specific tab.

<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++ 标签将会被激活。

🌐 You can add the hash #tab-cpp to your URL and reload, the C++ tab will be activated.

JavaScript 很奇怪
Rust 很快

Hello World

此外,可以在 Tabs 组件中将 updateAnchor 属性设置为 true,以便在每次选择新标签时自动更新 URL 哈希:

🌐 Additionally, the updateAnchor property can be set to true in the Tabs component to automatically update the URL hash whenever time a new tab is selected:

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

你好!

世界!

高级用法

🌐 Advanced Usage

以原始方式使用它:

🌐 Use it in the primitive way:

<Tabs defaultValue="npm">
  <TabsList>
    <TabsTrigger value="npm">
      <NpmIcon />
      npm
    </TabsTrigger>
  </TabsList>
  <TabsContent value="npm">Hello World</TabsContent>
</Tabs>
你好,世界

Last updated on

On this page