Drawer
Drawer
は、画面の端から表示されるパネルのコンポーネントです。
インポート
import {Drawer,DrawerOverlay,DrawerCloseButton,DrawerHeader,DrawerBody,DrawerFooter,} from "@yamada-ui/react"
Drawer
: パネルの状態を制御するラッパーコンポーネントです。DrawerOverlay
: パネルの背後に存在するオーバーレイのコンポーネントです。DrawerCloseButton
: パネルを閉じるボタンのコンポーネントです。DrawerHeader
: パネルのヘッダーを表示するコンポーネントです。DrawerBody
: パネルのメインコンテンツを表示するコンポーネントです。DrawerFooter
: パネルのフッターを表示するコンポーネントです。
DrawerOverlay
とDrawerCloseButton
は、省略することができます。
使い方
表示または非表示を制御するために、isOpen
とonClose
を設定します。
Drawer
は、内部的にModalを使用しています。
編集可能な例
const { isOpen, onOpen, onClose } = useDisclosure() return ( <> <Button onClick={onOpen}>Open Drawer</Button> <Drawer isOpen={isOpen} onClose={onClose}> <DrawerHeader>ドラゴンボール</DrawerHeader> <DrawerBody> 『ドラゴンボール』は、鳥山明による日本の漫画作品です。... </DrawerBody> <DrawerFooter> <Button variant="ghost" onClick={onClose}> とじる </Button> <Button colorScheme="primary">Wikipedia</Button> </DrawerFooter> </Drawer> </> )
サイズを変更する
編集可能な例
const sizeMap = ["xs", "sm", "md", "lg", "xl", "full"] const [size, setSize] = useState("md") const { isOpen, onOpen, onClose } = useDisclosure() return ( <> <Wrap gap="md"> {sizeMap.map((size) => ( <Button key={size} onClick={() => { setSize(size) onOpen() }} > Open {size} Drawer </Button> ))} </Wrap> <Drawer isOpen={isOpen} onClose={onClose} size={size}> <DrawerHeader>ドラゴンボール</DrawerHeader> <DrawerBody> 『ドラゴンボール』は、鳥山明による日本の漫画作品です。... </DrawerBody> <DrawerFooter> <Button variant="ghost" onClick={onClose}> とじる </Button> <Button colorScheme="primary">Wikipedia</Button> </DrawerFooter> </Drawer> </> )
位置を変更する
表示位置を変更するには、placement
にtop
やleft-start
などを設定します。デフォルトでは、right
が設定されています。
編集可能な例
const placementMap = ["top", "right", "bottom", "left"] const [placement, setPlacement] = useState("center") const { isOpen, onOpen, onClose } = useDisclosure() return ( <> <Wrap gap="md"> {placementMap.map((placement) => ( <Button key={placement} onClick={() => { setPlacement(placement) onOpen() }} > Open {placement} Drawer </Button> ))} </Wrap> <Drawer isOpen={isOpen} onClose={onClose} placement={placement}> <DrawerHeader>ドラゴンボール</DrawerHeader> <DrawerBody> 『ドラゴンボール』は、鳥山明による日本の漫画作品です。... </DrawerBody> <DrawerFooter> <Button variant="ghost" onClick={onClose}> とじる </Button> <Button colorScheme="primary">Wikipedia</Button> </DrawerFooter> </Drawer> </> )
所要時間を変更する
所要時間を変更する場合は、duration
に数値(秒)を設定します。
編集可能な例
const { isOpen, onOpen, onClose } = useDisclosure() return ( <> <Button onClick={onOpen}>Open Drawer</Button> <Drawer isOpen={isOpen} onClose={onClose} duration={0.7}> <DrawerHeader>ドラゴンボール</DrawerHeader> <DrawerBody> 『ドラゴンボール』は、鳥山明による日本の漫画作品です。... </DrawerBody> <DrawerFooter> <Button variant="ghost" onClick={onClose}> とじる </Button> <Button colorScheme="primary">Wikipedia</Button> </DrawerFooter> </Drawer> </> )
画面の高さに合わせる
パネルを画面の高さに合わせたい場合は、isFullHeight
をtrue
に設定します。
編集可能な例
const { isOpen, onOpen, onClose } = useDisclosure() return ( <> <Button onClick={onOpen}>Open Drawer</Button> <Drawer isOpen={isOpen} onClose={onClose} placement="bottom" isFullHeight> <DrawerHeader>ドラゴンボール</DrawerHeader> <DrawerBody> 『ドラゴンボール』は、鳥山明による日本の漫画作品です。... </DrawerBody> <DrawerFooter> <Button variant="ghost" onClick={onClose}> とじる </Button> <Button colorScheme="primary">Wikipedia</Button> </DrawerFooter> </Drawer> </> )
マウント時にスクロールをブロックしない
デフォルトでは、パネルを開いた際に主要なコンテンツのスクロールをブロックしています。これは、アクセシビリティを確保するためです。もし、主要なコンテンツのスクロールをブロックしたくない場合は、blockScrollOnMount
をfalse
に設定します。
編集可能な例
const { isOpen, onOpen, onClose } = useDisclosure() return ( <> <Button onClick={onOpen}>Open Drawer</Button> <Drawer isOpen={isOpen} onClose={onClose} blockScrollOnMount={false}> <DrawerHeader>ドラゴンボール</DrawerHeader> <DrawerBody> 『ドラゴンボール』は、鳥山明による日本の漫画作品です。... </DrawerBody> <DrawerFooter> <Button variant="ghost" onClick={onClose}> とじる </Button> <Button colorScheme="primary">Wikipedia</Button> </DrawerFooter> </Drawer> </> )
閉じるボタンをカスタマイズする
DrawerCloseButton
にprops
などを渡して、カスタマイズしたい場合は、省略せずに設定します。
編集可能な例
const { isOpen, onOpen, onClose } = useDisclosure() return ( <> <Button onClick={onOpen}>Open Drawer</Button> <Drawer isOpen={isOpen} onClose={onClose}> <DrawerCloseButton color="red.500" /> <DrawerHeader>ドラゴンボール</DrawerHeader> <DrawerBody> 『ドラゴンボール』は、鳥山明による日本の漫画作品です。... </DrawerBody> <DrawerFooter> <Button variant="ghost" onClick={onClose}> とじる </Button> <Button colorScheme="primary">Wikipedia</Button> </DrawerFooter> </Drawer> </> )
閉じるボタンを無効にする
onClose
を設定しない場合は、閉じるボタンを無効(非表示)になります。
デフォルトでは、オーバーレイをクリック時にモーダルは閉じます。onClose
が設定されないことでオーバーレイのクリックして閉じる動作も無効になることに注意してください。
編集可能な例
const { isOpen, onOpen, onClose } = useDisclosure() return ( <> <Button onClick={onOpen}>Open Drawer</Button> <Drawer isOpen={isOpen}> <DrawerHeader>ドラゴンボール</DrawerHeader> <DrawerBody> 『ドラゴンボール』は、鳥山明による日本の漫画作品です。... </DrawerBody> <DrawerFooter> <Button variant="ghost" onClick={onClose}> とじる </Button> <Button colorScheme="primary">Wikipedia</Button> </DrawerFooter> </Drawer> </> )
ドラッグして閉じる
Drawer
をドラッグで閉じたい場合は、closeOnDrag
をtrue
に設定します。
編集可能な例
const placementMap = ["top", "right", "bottom", "left"] const [placement, setPlacement] = useState("center") const { isOpen, onOpen, onClose } = useDisclosure() return ( <> <Wrap gap="md"> {placementMap.map((placement) => ( <Button key={placement} onClick={() => { setPlacement(placement) onOpen() }} > Open {placement} Drawer </Button> ))} </Wrap> <Drawer closeOnDrag isOpen={isOpen} onClose={onClose} placement={placement}> <DrawerHeader>ドラゴンボール</DrawerHeader> <DrawerBody> 『ドラゴンボール』は、鳥山明による日本の漫画作品です。... </DrawerBody> <DrawerFooter> <Button variant="ghost" onClick={onClose}> とじる </Button> <Button colorScheme="primary">Wikipedia</Button> </DrawerFooter> </Drawer> </> )
ドラッグバーを非表示にする
ドラッグバーを非表示にする場合は、withDragBar
をfalse
に設定します。
編集可能な例
const { isOpen, onOpen, onClose } = useDisclosure() return ( <> <Button onClick={onOpen}>Open Drawer</Button> <Drawer isOpen={isOpen} onClose={onClose} closeOnDrag withDragBar={false} withCloseButton > <DrawerHeader>ドラゴンボール</DrawerHeader> <DrawerBody> 『ドラゴンボール』は、鳥山明による日本の漫画作品です。... </DrawerBody> <DrawerFooter> <Button variant="ghost" onClick={onClose}> とじる </Button> <Button colorScheme="primary">Wikipedia</Button> </DrawerFooter> </Drawer> </> )
オーバーレイをカスタマイズする
DrawerOverlay
にprops
などを渡して、カスタマイズしたい場合は、省略せずに設定します。
編集可能な例
const { isOpen, onOpen, onClose } = useDisclosure() return ( <> <Button onClick={onOpen}>Open Drawer</Button> <Drawer isOpen={isOpen} onClose={onClose}> <DrawerOverlay bg="blackAlpha.300" backdropFilter="blur(10px)" /> <DrawerHeader>ドラゴンボール</DrawerHeader> <DrawerBody> 『ドラゴンボール』は、鳥山明による日本の漫画作品です。... </DrawerBody> <DrawerFooter> <Button variant="ghost" onClick={onClose}> とじる </Button> <Button colorScheme="primary">Wikipedia</Button> </DrawerFooter> </Drawer> </> )
オーバーレイを無効にする
パネルのオーバーレイを無効(非表示)にする場合は、withOverlay
をfalse
にします。
編集可能な例
const { isOpen, onOpen, onClose } = useDisclosure() return ( <> <Button onClick={onOpen}>Open Drawer</Button> <Drawer isOpen={isOpen} onClose={onClose} withOverlay={false}> <DrawerHeader>ドラゴンボール</DrawerHeader> <DrawerBody> 『ドラゴンボール』は、鳥山明による日本の漫画作品です。... </DrawerBody> <DrawerFooter> <Button variant="ghost" onClick={onClose}> とじる </Button> <Button colorScheme="primary">Wikipedia</Button> </DrawerFooter> </Drawer> </> )
GitHubでこのページを編集する