すべてのコンポーネント

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各項目の要素のクラス。インラインスタイルは itemStyle で指定します。
highlightClassNamestringハイライトのクラス。インラインスタイルは highlightStyle で指定します。
transitionTransitionspringタイミングカーブ { duration, easing } かスプリング { tempo: 'spring', spring }。スプリングは中断されても勢いを保ちます。

ほかの props は描画される要素に渡るので、className、style、イベントハンドラーはいつもどおり使えます。

Web と React Native

各項目はデフォルトで button として描画され(itemAs で変更可能)、押すと onValueChange(key, item) が呼ばれます。

React Native では項目は Pressable です。位置はネイティブドライバーで、サイズは JavaScript で動かす内側のビューで動きます。

使っているサンプル

検索

入力するとドキュメントを検索します。