跳转到内容

Dock

移动端风格的底部导航栏。

import { Dock } from 'asterui'

基础 Dock

带图标和标签的移动端风格底部导航。(为演示内联显示;通常固定在底部)

import { Dock } from 'asterui'
import { useState } from 'react'
import { HomeIcon, MagnifyingGlassIcon, HeartIcon, UserIcon } from '@aster-ui/icons'

function App() {
  const [active, setActive] = useState(0)
  
  return (
      <Dock
        items={[
          { icon: <HomeIcon size="lg" />, label: 'Home' },
          { icon: <MagnifyingGlassIcon size="lg" />, label: 'Search' },
          { icon: <HeartIcon size="lg" />, label: 'Favorites' },
          { icon: <UserIcon size="lg" />, label: 'Profile' },
        ]}
        activeIndex={active}
        onChange={setActive}
      />
    )
}

export default App

尺寸

从 xs 到 lg 的不同 dock 尺寸。(为演示内联显示)

import { Dock, Space } from 'asterui'
import { useState } from 'react'
import { HomeIcon, Cog6ToothIcon, BellIcon } from '@aster-ui/icons'

function App() {
  const [active, setActive] = useState(0)
  const items = [
    { icon: <HomeIcon />, label: 'Home' },
    { icon: <Cog6ToothIcon />, label: 'Settings' },
    { icon: <BellIcon />, label: 'Alerts' },
  ]
  
  return (
      <Space direction="vertical" size="lg" className="w-full">
        <Dock size="xs" items={items} activeIndex={active} onChange={setActive} />
        <Dock size="sm" items={items} activeIndex={active} onChange={setActive} />
        <Dock size="md" items={items} activeIndex={active} onChange={setActive} />
        <Dock size="lg" items={items} activeIndex={active} onChange={setActive} />
      </Space>
    )
}

export default App

仅图标

没有标签的 dock,呈现简洁外观。(为演示内联显示)

import { Dock } from 'asterui'
import { useState } from 'react'
import { HomeIcon, MagnifyingGlassIcon, PlusCircleIcon, HeartIcon, UserIcon } from '@aster-ui/icons'

function App() {
  const [active, setActive] = useState(2)
  
  return (
      <Dock
        items={[
          { icon: <HomeIcon size="lg" /> },
          { icon: <MagnifyingGlassIcon size="lg" /> },
          { icon: <PlusCircleIcon size={32} /> },
          { icon: <HeartIcon size="lg" /> },
          { icon: <UserIcon size="lg" /> },
        ]}
        activeIndex={active}
        onChange={setActive}
      />
    )
}

export default App

自定义样式

为 dock 应用自定义颜色。(为演示内联显示)

import { Dock } from 'asterui'
import { useState } from 'react'
import { HomeIcon, Cog6ToothIcon, BellIcon } from '@aster-ui/icons'

function App() {
  const [active, setActive] = useState(0)
  
  return (
      <Dock
        className="bg-neutral text-neutral-content"
        items={[
          { icon: <HomeIcon size="lg" />, label: 'Home' },
          { icon: <Cog6ToothIcon size="lg" />, label: 'Settings' },
          { icon: <BellIcon size="lg" />, label: 'Alerts' },
        ]}
        activeIndex={active}
        onChange={setActive}
      />
    )
}

export default App

使用 Children

使用 Dock.Item 子元素获得更多控制。(为演示内联显示)

import { Dock } from 'asterui'
import { useState } from 'react'
import { HomeIcon, Cog6ToothIcon } from '@aster-ui/icons'

function App() {
  const [active, setActive] = useState(0)
  
  return (
      <Dock>
        <Dock.Item active={active === 0} onClick={() => setActive(0)}>
          <HomeIcon size="lg" />
          <span className="dock-label">Home</span>
        </Dock.Item>
        <Dock.Item active={active === 1} onClick={() => setActive(1)}>
          <Cog6ToothIcon size="lg" />
          <span className="dock-label">Settings</span>
        </Dock.Item>
      </Dock>
    )
}

export default App
属性描述类型默认值
itemsDock 项目配置DockItemConfig[]-
size尺寸变体'xs' | 'sm' | 'md' | 'lg' | 'xl''md'
activeIndex受控的激活项目索引number-
onChange项目被点击时的回调(index: number) => void-
childrenDock.Item 子元素(items 的替代方案)React.ReactNode-
className额外的 CSS 类名string-
data-testid用于测试的测试 IDstring-
属性描述类型默认值
icon图标元素React.ReactNode-
label标签文本string-
active项目是否激活(非受控)booleanfalse
disabled项目是否禁用booleanfalse
onClick点击处理器() => void-
data-testid用于测试的测试 IDstring-
属性描述类型默认值
active此项目是否激活booleanfalse
children项目内容(图标和可选标签)React.ReactNode-
onClick点击处理器() => void-
disabled项目是否禁用booleanfalse
className额外的 CSS 类名string-
data-testid用于测试的测试 IDstring-
  • 使用语义化的 button 元素作为导航项
  • 支持键盘导航
  • 激活状态有视觉指示
  • 对于 iOS 安全区域支持,请在 viewport meta 标签中添加 viewport-fit=cover