useSnacks
useSnacks is a custom hook for controlling notifications used in forms and other similar situations.
Import
import { useSnacks } from "@yamada-ui/react"
Usage
To display notifications, use useSnacks. useSnacks returns an instance for displaying and controlling notifications.
Editable example
const { snack, snacks } = useSnacks() return ( <VStack> <Wrap gap="md"> <Button colorScheme="primary" onClick={() => { snack({ title: "孫悟空", description: "オッス!オラ悟空!", }) }} > Add Snack </Button> <Button colorScheme="danger" onClick={snack.closeAll}> Close all Snack </Button> </Wrap> <Snacks snacks={snacks} gutter={[0, "md"]} /> <Input placeholder="Input" /> </VStack> )
Customize Notifications
Pass notification options as arguments to useNotice or to the instance returned from useNotice.
Options passed to the instance returned from useNotice take precedence.
Change Direction
To change the direction, set direction to either top or bottom. By default, top is set.
Editable example
const { snack, snacks } = useSnacks({ direction: "bottom" }) return ( <VStack> <Wrap gap="md"> <Button colorScheme="primary" onClick={() => { snack({ title: "孫悟空", description: "オッス!オラ悟空!", }) }} > Add Snack </Button> <Button colorScheme="danger" onClick={snack.closeAll}> Close all Snack </Button> </Wrap> <Snacks snacks={snacks} gutter={[0, "md"]} /> <Input placeholder="Input" /> </VStack> )
Adjust Margins
Snacks has a collapsing animation implemented. If the parent element has settings like gap, it may result in an unnatural animation. In that case, adjust the margin with gutter.
By default, gutter adds a negative margin. If you want to disable the negative margin, set negateMargin to false.
Editable example
const { snack, snacks } = useSnacks() return ( <VStack> <Wrap gap="md"> <Button colorScheme="primary" onClick={() => { snack({ title: "孫悟空", description: "オッス!オラ悟空!", }) }} > Add Snack </Button> <Button colorScheme="danger" onClick={snack.closeAll}> Close all Snack </Button> </Wrap> <Snacks snacks={snacks} gutter={[0, "lg"]} negateMargin={false} mb="-md" /> <Input placeholder="Input" /> </VStack> )
Change Display Duration
Change the display duration with duration.
Editable example
const { snack, snacks } = useSnacks({ duration: 8000 }) return ( <VStack> <Wrap gap="md"> <Button colorScheme="primary" onClick={() => { snack({ title: "孫悟空", description: "オッス!オラ悟空!", duration: 10000, }) }} > Add Snack </Button> <Button colorScheme="danger" onClick={snack.closeAll}> Close all Snack </Button> </Wrap> <Snacks snacks={snacks} gutter={[0, "md"]} /> <Input placeholder="Input" /> </VStack> )
Limit the Number of Displays
To limit the number of displays, change it with limit. By default, 3 is set.
If you want to display an unlimited number of notifications, set it to null.
Editable example
const { snack, snacks } = useSnacks({ limit: 5 }) return ( <VStack> <Wrap gap="md"> <Button colorScheme="primary" onClick={() => { snack({ title: "孫悟空", description: "オッス!オラ悟空!", }) }} > Add Snack </Button> <Button colorScheme="danger" onClick={snack.closeAll}> Close all Snack </Button> </Wrap> <Snacks snacks={snacks} gutter={[0, "md"]} /> <Input placeholder="Input" /> </VStack> )
Disable the Close Button
To disable the close button, set isClosable to false.
Editable example
const { snack, snacks } = useSnacks({ isClosable: false }) return ( <VStack> <Wrap gap="md"> <Button colorScheme="primary" onClick={() => { snack({ title: "孫悟空", description: "オッス!オラ悟空!", isClosable: false, }) }} > Add Snack </Button> <Button colorScheme="danger" onClick={snack.closeAll}> Close all Snack </Button> </Wrap> <Snacks snacks={snacks} gutter={[0, "md"]} /> <Input placeholder="Input" /> </VStack> )
Change Variant
Uses the same variants as Alert.
Editable example
const { snack, snacks } = useSnacks() const variants = ["basic", "solid", "subtle", "top-accent", "left-accent"] return ( <VStack> <Wrap gap="md"> {variants.map((variant) => ( <Button key={variant} onClick={() => snack({ title: "孫悟空", description: "オッス!オラ悟空!", variant, }) } > Add "{variant}" Snack </Button> ))} <Button colorScheme="danger" onClick={snack.closeAll}> Close all Snack </Button> </Wrap> <Snacks snacks={snacks} gutter={[0, "md"]} /> <Input placeholder="Input" /> </VStack> )
Change Status
Status changes the color of the notification.
Editable example
const { snack, snacks } = useSnacks() const statuses = ["info", "success", "warning", "error", "loading"] return ( <VStack> <Wrap gap="md"> {statuses.map((status) => ( <Button key={status} onClick={() => snack({ title: "孫悟空", description: "オッス!オラ悟空!", status, }) } > Add "{status}" Snack </Button> ))} <Button colorScheme="danger" onClick={snack.closeAll}> Close all Snack </Button> </Wrap> <Snacks snacks={snacks} gutter={[0, "md"]} /> <Input placeholder="Input" /> </VStack> )
Use Color Scheme
Change the color with colorScheme.
Editable example
const { snack, snacks } = useSnacks() const colorSchemes = ["green", "purple", "gray", "pink"] return ( <VStack> <Wrap gap="md"> {colorSchemes.map((colorScheme) => ( <Button key={colorScheme} onClick={() => snack({ title: "孫悟空", description: "オッス!オラ悟空!", colorScheme, }) } > Add "{colorScheme}" Snack </Button> ))} <Button colorScheme="danger" onClick={snack.closeAll}> Close all Snack </Button> </Wrap> <Snacks snacks={snacks} gutter={[0, "md"]} /> <Input placeholder="Input" /> </VStack> )
Change Loading Variant
Change the variant of the loading icon with icon.variant.
Editable example
const { snack, snacks } = useSnacks() const variants = ["oval", "puff", "dots", "grid"] return ( <VStack> <Wrap gap="md"> {variants.map((variant) => ( <Button key={variant} onClick={() => snack({ title: "孫悟空", description: "オッス!オラ悟空!", status: "loading", icon: { variant }, }) } > Add "{variant}" Snack </Button> ))} <Button colorScheme="danger" onClick={snack.closeAll}> Close all Snack </Button> </Wrap> <Snacks snacks={snacks} gutter={[0, "md"]} /> <Input placeholder="Input" /> </VStack> )
Update Notifications
To update a notification, specify the id generated from the instance and pass new options.
Editable example
const { snack, snacks } = useSnacks() const ref = useRef<string | number | undefined>(undefined) const onOpen = () => { ref.current = snack({ title: "孫悟空", description: "オッス!オラ悟空!", }) } const onUpdate = () => { if (ref.current) snack.update(ref.current, { title: "ベジータ", description: "よくも…よくも…オレの…ブルマを!!", colorScheme: "purple", }) } const onCloseAll = () => { snack.closeAll() } return ( <VStack> <Wrap gap="md"> <Button colorScheme="primary" onClick={onOpen}> Add Snack </Button> <Button onClick={onUpdate}>Update last Snack</Button> <Button colorScheme="danger" onClick={onCloseAll}> Close all Snack </Button> </Wrap> <Snacks snacks={snacks} gutter={[0, "md"]} /> <Input placeholder="Input" /> </VStack> )
Close Notifications
To close all notifications, use the closeAll method of the instance. To close an individual notification, specify the id generated from the instance.
Editable example
const { snack, snacks } = useSnacks() const ref = useRef<string | number | undefined>(undefined) const onOpen = () => { ref.current = snack({ title: "孫悟空", description: "オッス!オラ悟空!", }) } const onClose = () => { if (ref.current) snack.close(ref.current) } const onCloseAll = () => { snack.closeAll() } return ( <VStack> <Wrap gap="md"> <Button colorScheme="primary" onClick={onOpen}> Add Snack </Button> <Button onClick={onClose}>Close last Snack</Button> <Button colorScheme="danger" onClick={onCloseAll}> Close all Snack </Button> </Wrap> <Snacks snacks={snacks} gutter={[0, "md"]} /> <Input placeholder="Input" /> </VStack> )
Customize Close Event
To customize the close event, set closeStrategy to "element", "button", or "both". The default is "button".
"element": Close by clicking on the element."button": Close by clicking on the close button."both": Close by clicking on either the element or the close button.
Editable example
const { snack, snacks } = useSnacks({ closeStrategy: "element" }) const ref = useRef<string | number | undefined>(undefined) const onCloseAll = () => { snack.closeAll() } return ( <VStack> <Wrap gap="md"> <Button colorScheme="primary" onClick={() => { snack({ title: "孫悟空", description: "オッス!オラ悟空!", closeStrategy: "element", }) }} > Add Snack </Button> <Button colorScheme="danger" onClick={snack.closeAll}> Close all Snack </Button> </Wrap> <Snacks snacks={snacks} gutter={[0, "md"]} /> <Input placeholder="Input" /> </VStack> )
Customize Components
To customize the component being rendered, use component.
Editable example
const { snack, snacks } = useSnacks() return ( <VStack> <Wrap gap="md"> <Button colorScheme="primary" onClick={() => { snack({ component: () => ( <Box color="white" py={3} px={4} bg="purple.500"> ギャルのパンティーおくれーーーっ!!!!! </Box> ), }) }} > Add Snack </Button> <Button colorScheme="danger" onClick={snack.closeAll}> Close all Snack </Button> </Wrap> <Snacks snacks={snacks} gutter={[0, "md"]} /> <Input placeholder="Input" /> </VStack> )
Customize Styles
Editable example
const { snack, snacks } = useSnacks() return ( <VStack> <Wrap gap="md"> <Button colorScheme="primary" onClick={() => { snack({ title: "孫悟空", description: "オッス!オラ悟空!", style: { w: "60%", }, }) }} > Add Snack </Button> <Button colorScheme="danger" onClick={snack.closeAll}> Close all Snack </Button> </Wrap> <Snacks snacks={snacks} gutter={[0, "md"]} /> <Input placeholder="Input" /> </VStack> )
Edit this page on GitHub

