--- title: Reorder description: "`Reorder`は、項目の順序をドラッグアンドドロップで変更できるコンポーネントです。" links: - style: https://github.com/yamada-ui/yamada-ui/tree/main/packages/react/src/components/reorder/reorder.style.ts - source: https://github.com/yamada-ui/yamada-ui/tree/main/packages/react/src/components/reorder - storybook: https://yamada-ui.github.io/yamada-ui?path=/story/components-reorder--basic --- ```tsx 虎杖悠仁 伏黒恵 釘崎野薔薇 五条悟 七海建人 ``` ## 使い方 ```tsx import { Reorder } from "@yamada-ui/react" ``` ```tsx import { Reorder } from "@/components/ui" ``` ```tsx import { Reorder } from "@workspaces/ui" ``` ```tsx 虎杖悠仁 伏黒恵 釘崎野薔薇 ``` ### itemsを使う ```tsx const items = useMemo( () => [ { value: "虎杖悠仁", label: "虎杖悠仁" }, { value: "伏黒恵", label: "伏黒恵" }, { value: "釘崎野薔薇", label: "釘崎野薔薇" }, { value: "五条悟", label: "五条悟" }, { value: "七海建人", label: "七海建人" }, ], [], ) return ``` ### バリアントを変更する ```tsx const items = useMemo( () => [ { value: "虎杖悠仁", label: "虎杖悠仁" }, { value: "伏黒恵", label: "伏黒恵" }, { value: "釘崎野薔薇", label: "釘崎野薔薇" }, ], [], ) return ( }> ) ``` ### サイズを変更する ```tsx const items = useMemo( () => [ { value: "虎杖悠仁", label: "虎杖悠仁" }, { value: "伏黒恵", label: "伏黒恵" }, { value: "釘崎野薔薇", label: "釘崎野薔薇" }, ], [], ) return ( }> ) ``` ### 方向を変更する 方向を変更する場合は、`orientation`に`vertical`または`"horizontal"`を設定します。デフォルトでは、`"vertical"`が設定されています。 ```tsx const items = useMemo( () => [ { value: "虎杖悠仁", label: "虎杖悠仁" }, { value: "伏黒恵", label: "伏黒恵" }, { value: "釘崎野薔薇", label: "釘崎野薔薇" }, { value: "五条悟", label: "五条悟" }, ], [], ) return ( }> ) ``` ### ドラッグアンドドロップ可能な領域を限定する ドラッグアンドドロップ可能な領域を限定する場合は、`ReorderTrigger`を使用します。 ```tsx 虎杖悠仁 伏黒恵 釘崎野薔薇 ``` ### 完了のイベントをハンドルする ユーザーのドラッグアンドドロップが終了し、項目の順序が完了されたイベントをハンドルする場合は、`onCompleteChange`を使用します。`onCompleteChange`は、完了した順序を配列で提供します。 ```tsx const items = useMemo( () => [ { value: "虎杖悠仁", label: "虎杖悠仁" }, { value: "伏黒恵", label: "伏黒恵" }, { value: "釘崎野薔薇", label: "釘崎野薔薇" }, { value: "五条悟", label: "五条悟" }, ], [], ) const [completedOrder, setCompletedOrder] = useState([ "虎杖悠仁", "伏黒恵", "釘崎野薔薇", "五条悟", ]) return ( 完了時の順序: {completedOrder.join(", ")} setCompletedOrder(values)} /> ) ``` ### スクロール可能な領域で使う スクロールがある領域で使う場合は、項目がオフセットを正しく測定できるように`layoutScroll`を`true`に設定します。 ```tsx const items = useMemo( () => [ { value: "虎杖悠仁", label: "虎杖悠仁" }, { value: "伏黒恵", label: "伏黒恵" }, { value: "釘崎野薔薇", label: "釘崎野薔薇" }, { value: "五条悟", label: "五条悟" }, { value: "七海建人", label: "七海建人" }, ], [], ) return ( ) ``` ### 制御する ```tsx const items = useMemo( () => [ { value: "虎杖悠仁", label: "虎杖悠仁" }, { value: "伏黒恵", label: "伏黒恵" }, { value: "釘崎野薔薇", label: "釘崎野薔薇" }, { value: "五条悟", label: "五条悟" }, ], [], ) const [values, setValues] = useState([ "虎杖悠仁", "伏黒恵", "釘崎野薔薇", "五条悟", ]) return ( 現在の順序: {values.join(", ")} setValues(newValues)} /> ) ``` ## Props ### Reorder.Root | Prop | Default | Type | Description | | ------------------ | ------------ | ------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- | | `as` | - | `keyof IntrinsicElements` | The HTML element to render. | | `asChild` | - | `boolean` | Merges its props onto its immediate child. | | `css` | - | `CSSObject \| CSSObject[]` | The CSS object. | | `colorScheme` | - | `"amber" \| "black" \| "blackAlpha" \| "blue" \| "cyan" \| "danger" \| "emerald" \| "error" \| "flashy" \| "fuchsia" ...` | Set color scheme variables. | | `size` | `"md"` | `"lg" \| "md" \| "sm" \| "xl"` | The size of the component. | | `variant` | `"panel"` | `"elevated" \| "outline" \| "panel" \| "plain" \| "solid" \| "subtle" \| "surface" ...` | The variant of the component. | | `items` | - | `ReorderItemProps[]` | If provided, generate reorder items based on items. | | `onChange` | - | `(values: Y[]) => void` | The callback invoked when reorder items are moved. | | `onCompleteChange` | - | `(values: Y[]) => void` | The callback invoked when the movement of reorder items is completed. | | `orientation` | `"vertical"` | `"horizontal" \| "vertical"` | The orientation of the reorder. | ### Reorder.Item | Prop | Default | Type | Description | | ------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------ | | `as` | - | `keyof IntrinsicElements` | The HTML element to render. | | `asChild` | - | `boolean` | Merges its props onto its immediate child. | | `css` | - | `CSSObject \| CSSObject[]` | The CSS object. | | `colorScheme` | - | `"amber" \| "black" \| "blackAlpha" \| "blue" \| "cyan" \| "danger" \| "emerald" \| "error" \| "flashy" \| "fuchsia" ...` | Set color scheme variables. | | `label` | - | `string \| number \| bigint \| boolean \| ReactElement> \| Iterable \| ReactPortal \| Promise<...>` | The label of the reorder item. | | `value` | - | `NonNullable` | The value of the reorder item. | ### Reorder.Trigger | Prop | Default | Type | Description | | ------------- | ------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------ | | `as` | - | `As` | The HTML element to render. | | `asChild` | - | `boolean` | Merges its props onto its immediate child. | | `css` | - | `CSSObject \| CSSObject[]` | The CSS object. | | `colorScheme` | - | `"amber" \| "black" \| "blackAlpha" \| "blue" \| "cyan" \| "danger" \| "emerald" \| "error" \| "flashy" \| "fuchsia" ...` | Set color scheme variables. |