全部组件

MotionHighlight

由数据生成的标签页、分段控件或导航,一个高亮会移动到选中项。

WebReact Native选择与翻页

动手试试

正在准备示例…

最简用法

Tabs.jsx
<MotionHighlight
  items={['Overview', 'Activity', 'Settings']}
  value={tab}
  onValueChange={setTab}
  hover
/>;

它替你处理的事

  • 一个高亮在各项之间移动并改变尺寸;用 highlightClassName 设置样式。
  • 各项来自 items,key 来自 getKey,标签来自 renderItem。
  • hover 让高亮跟随指针,离开后回到选中项。
  • 各项可以换成多行,高亮也会跟随。
  • 字体加载和布局变化会自动重新测量。

适用场景

  • 页面标签。
  • 筛选栏。
  • 设置表单中的分段控件。

Props

Prop类型默认值说明
itemsreadonly T[]—必需你的数据数组。
valuekey | null—必需高亮项的 key;null 隐藏高亮。
onValueChange(key, item) => void某一项被按下时,携带 key 和该项运行。
getKey(item) => string | numberitem.id为一项返回唯一且稳定的 key。默认为 item.id,字符串和数字则为其本身。
renderItem(item, { selected, index }) => ReactNodeitem.label绘制一项;会收到它是否被选中。
hoverbooleanfalse在各项上跟随指针,离开时回到 value(Web)。
itemAselement'button'每一项使用的元素。
itemClassNamestring每一项元素的 class;itemStyle 设置其内联样式。
highlightClassNamestring高亮的 class;highlightStyle 设置其内联样式。
transitionTransitionspring时间曲线 { duration, easing } 或弹簧 { tempo: 'spring', spring }。弹簧被打断时会保留动量。

其他 props 会传给渲染的元素,所以 className、style 和事件处理函数照常可用。

Web 与 React Native

每一项默认渲染为 button(用 itemAs 修改),按下时调用 onValueChange(key, item)。

在 React Native 上各项是 Pressable;位置由原生驱动,尺寸由一个 JavaScript 驱动的嵌套视图控制。

用到它的示例

搜索

输入关键词搜索文档。