booleanToast
The toast component is used to give feedback to users after an action has taken place.
Import#
import { useToast } from '@chakra-ui/react'
Usage#
The toast will close itself when the close button is clicked, or after a timeout.
Toasts can be configured to appear at either the top or the bottom of an application window, and it is possible to have more than one toast onscreen at a time.
function ToastExample() {const toast = useToast()return (<ButtononClick={() =>toast({title: 'Account created.',description: "We've created your account for you.",status: 'success',duration: 9000,isClosable: true,})}>Show Toast</Button>)}
Make sure to call
useToastat least one component level below the<ChakraProvider>because it needs access to the current theme.
Promise-Based Toast#
Display a toast asynchronously based on a Promise for loading, success,
and error states:
loadingwill be shown until the promise is either resolved or rejected.successwill be shown when/if the promise is resolved.errorwill be shown when/if the promise is rejected.
function PromiseBasedToastExample() {const toast = useToast()return (<ButtononClick={() => {// Create an example promise that resolves in 5sconst examplePromise = new Promise((resolve, reject) => {setTimeout(() => resolve(200), 5000)})// Will display the loading toast until the promise is either resolved// or rejected.toast.promise(examplePromise, {success: { title: 'Promise resolved', description: 'Looks great' },error: { title: 'Promise rejected', description: 'Something wrong' },loading: { title: 'Promise pending', description: 'Please wait' },})}}>Show Toast</Button>)}
Custom component#
Display a custom component instead of the default Toast UI.
function CustomToastExample() {const toast = useToast()return (<ButtononClick={() =>toast({position: 'bottom-left',render: () => (<Box color='white' p={3} bg='blue.500'>Hello World</Box>),})}>Show Toast</Button>)}
Closing Toasts#
Toasts can be closed imperatively, individually (via the close instance
method) or all together (via the closeAll instance method).
function ClosingToastExample() {const toast = useToast()const toastIdRef = React.useRef()function close() {if (toastIdRef.current) {toast.close(toastIdRef.current)}}function closeAll() {// you may optionally pass an object of positions to exclusively close// keeping other positions opened// e.g. `{ positions: ['bottom'] }`toast.closeAll()}function addToast() {toastIdRef.current = toast({ description: 'some text' })}return (<Wrap><Button onClick={addToast} type='button'>Toast</Button><Button onClick={close} type='button' variant='outline'>Close last toast</Button><Button onClick={closeAll} type='button' variant='outline'>Close all toasts</Button></Wrap>)}
Updating Toasts#
Toasts' options can be updated, by passing an id and the new options to the
update instance method.
function UpdatingToastExample() {const toast = useToast()const toastIdRef = React.useRef()function update() {if (toastIdRef.current) {toast.update(toastIdRef.current, { description: 'new text' })}}function addToast() {toastIdRef.current = toast({ description: 'some text' })}return (<Stack isInline spacing={2}><Button onClick={addToast} type='button'>Toast</Button><Button onClick={update} type='button' variant='outline'>Update last toast</Button></Stack>)}
Status#
You can use status to change the color of your toasts.
function ToastStatusExample() {const toast = useToast()const statuses = ['success', 'error', 'warning', 'info']return (<Wrap>{statuses.map((status, i) => (<WrapItem key={i}><ButtononClick={() =>toast({title: `${status} toast`,status: status,isClosable: true,})}>Show {status} toast</Button></WrapItem>))}</Wrap>)}
Variants#
Toast uses the same variants as the
Alert component.
function ToastVariantsExample() {const toast = useToast()const variants = ['solid', 'subtle', 'left-accent', 'top-accent']return (<Wrap>{variants.map((variant, i) => (<WrapItem key={i}><ButtononClick={() =>toast({title: `${variant} toast`,variant: variant,isClosable: true,})}>Show {variant} toast</Button></WrapItem>))}</Wrap>)}
Custom container styles#
The toast function now exposes a containerStyle property you can use to
override the default styles for the toast container.
function Example() {// Via instantiationconst toast = useToast({position: 'top',title: 'Container style is updated',containerStyle: {width: '800px',maxWidth: '100%',},})// Or via trigger// Style here will overwrite the entire style abovereturn (<ButtononClick={() => {toast({containerStyle: {border: '20px solid red',},})}}>Click me to show toast with custom container style.</Button>)}
Changing the toast position#
Using the position prop you can adjust where your toast will be popup from.
function PositionExample() {const toast = useToast()const positions = ['top','top-right','top-left','bottom','bottom-right','bottom-left',]return (<Wrap>{positions.map((position, i) => (<WrapItem key={i}><ButtononClick={() =>toast({title: `${position} toast`,position: position,isClosable: true,})}>Show {position} toast</Button></WrapItem>))}</Wrap>)}
Preventing duplicate toast#
In some cases you might need to prevent duplicate of specific toasts. To achieve
you need to pass an id and use the toast.isActive method to determine when
to call toast(...).
function PreventDuplicateExample() {const toast = useToast()const id = 'test-toast'return (<ButtononClick={() => {if (!toast.isActive(id)) {toast({id,title: 'Hey! You can create a duplicate toast',})}}}>Click me!</Button>)}
Configuring toast globally#
You can configure the toast globally by passing the toastOptions prop to the
ChakraProvider component.
The toastOptions prop accepts the same options as the useToast hook.
<ChakraProvider toastOptions={{ defaultOptions: { position: 'bottom' } }}><App /></ChakraProvider>
Besides the defaultOptions, you can also pass the following options:
-
motionVariants: The framer motion variants for the toast container. This controls the animations for the toasts. -
component: The custom component to use for the toast -
portalProps: The props to pass to the toast's portal component -
toastSpacing: The spacing between toasts. The default is0.5rem
Standalone Toasts#
Use createStandaloneToast to create toasts from outside of your React
Components. Both ChakraProvider and ToastContainer will render a
ToastProvider, so only include <ToastContainer /> to create toasts from
outside ChakraProvider.
🚨 If you're using a custom theme, you must pass it in the arguments to
createStandaloneToast. If you don't, the default theme will be applied, causing the font size of your page to shift when the toast is open.
import * as ReactDOM from 'react-dom/client'import { createStandaloneToast } from '@chakra-ui/react'const { ToastContainer, toast } = createStandaloneToast()// render the ToastContainer in your React rootconst rootElement = document.getElementById('root')ReactDOM.createRoot(yourRootElement).render(<><App /><ToastContainer /></>,)toast({title: 'An error occurred.',description: 'Unable to create user account.',status: 'error',duration: 9000,isClosable: true,})
Props#
addRole
addRolefalsecontainerStyle
containerStyleOptional style overrides for the container wrapping the toast component.
SystemPropsdescription
descriptionThe description of the toast
type ONLY_FOR_FORMAT =
| string
| number
| boolean
| ReactElement<any, string | JSXElementConstructor<any>>
| Iterable<ReactNode>
| ReactPortal
| PromiseLikeOfReactNodeduration
durationThe delay before the toast hides (in milliseconds)
If set to null, toast will never dismiss.
number5000 ( = 5000ms )icon
iconA custom icon that will be displayed by the toast.
type ONLY_FOR_FORMAT =
| string
| number
| boolean
| ReactElement<any, string | JSXElementConstructor<any>>
| Iterable<ReactNode>
| ReactPortal
| PromiseLikeOfReactNodeid
idThe id of the toast.
Mostly used when you need to prevent duplicate.
By default, we generate a unique id for each toast
ToastIdisClosable
isClosableIf true, toast will show a close button
booleanfalseonClose
onClose() => voidonCloseComplete
onCloseCompleteCallback function to run side effects after the toast has closed.
() => voidposition
positionThe placement of the toast
ToastPositionbottomrender
renderRender a component toast component.
Any component passed will receive 2 props: id and onClose.
(props: RenderProps) => ReactNodestatus
statusThe status of the toast.
"success" | "error" | "warning" | "info" | "loading"title
titleThe title of the toast
type ONLY_FOR_FORMAT =
| string
| number
| boolean
| ReactElement<any, string | JSXElementConstructor<any>>
| Iterable<ReactNode>
| ReactPortal
| PromiseLikeOfReactNode