notistack
Notistack is an extention to Material-UI Snackbar. notistack makes it extremely easy to display snackbars (so you don't have to deal with open/close state of them), and also enables you to stack snackbars on top of one another. It's highly customizable and you can customize snackbars the same way you do for Mui-Snackbars.
Play with online demo here
Stacking behaviour | Dismiss oldest when reached maxSnack (3 here) |
---|---|
Table of Contents
Getting Started
Use your prefered package manager:
npm install notistack
yarn add notistack
How to use
1: Wrap your app inside a SnackbarProvider
component: (see docs for a full list of available props)
; <SnackbarProvider maxSnack=3> <App /></SnackbarProvider>
2: Export any component that needs to send notification using withSnackbar
. By doing this, you'll have access to methods enqueueSnackbar
and closeSnackbar
, where the former can be used to send snackbars.
; { ; }; { //... }; ; MyComponent;
Online demo
You can see the online demo and experiment all the possible configurations here
.
Or see the code for a minimal working example: codesandbox
Documentation
See full docs here
SnackbarProvider:
All material-ui Snackbar props will get passed down to a Snackbar component. See Material-ui docs for more info.
// Maximum number of snackbars that can be stacked on top of eachother.maxSnack type: number required: false default: 3 // The little icon that is displayed in a snackbariconVariant type: any required: false default: Material design icons // Hide or display icon variant of a snackbarhideIconVariant type: boolean required: false default: false // Do not allow snackbars with the same message to be displayed multiple timespreventDuplicate type: boolean required: false default: false // Denser margins for snackbars. Recommended to be used on mobile devicesdense type: boolean required: false default: false // Example of a Mui-Snackbar proptransitionDuration= exit: 380 enter: 400
Using material-ui classes
prop, you can override styles applied to a snackbar based on its variant. For more info see overriding with classes. This accepts the following keys:
classes.variantSuccess: Styles applied to the snackbar if variant is set to 'success'.
classes.variantError: is set to 'error'.
classes.variantWarning: is set to 'warning'.
classes.variantInfo: is set to 'info'.
withSnackbar:
When you export your component using withSnackbar
, you'll have access to enqueueSnackbar
and closeSnackbar
methods in your props.
enqueueSnackbar
Adds a snackbar to the queue to be displayed to the user. It takes two arguments message
and an object of options
and returns a key that is used to reference that snackbar later on. (e.g. to dismiss it programmatically)
const key = thisprops // text of the snackbarmessage type:string required: true // object containing options with the following shapeoptions: type:object required: false // type of the snackbaroptionsvariant type:string // keep a snackbar in the view and prevent auto dismissaloptionspersist type:boolean required: false // hide or display this message if it's the same of the previous oneoptionspreventDuplicate type:boolean required: false // You can pass any material-ui Snackbar prop here, and they will be applied to this // individual snackbar. For example, this particular snackbar will get dismissed after 1 second.optionsautoHideDuration: 1000
Note: onPresentSnackbar
has been now deprecated. Use enqueueSnackbar
instead:
// ❌ before:thisprops // ✅ after:thisprops
closeSnackbar
Dismiss snackbar with the given key.
thisprops // id returned by enqueueSnackbar - in order to reference a snackbarkey type: string|number required: true
useSnackbar:
As an alternative to withSnackbar
HOC, you can use useSnackbar
hook.
; const MyButton = { const enqueueSnackbar closeSnackbar = ; const handleClick = { ; }; return <button onClick=handleClick>Show snackbar</button> ;}
Redux and Mobx support:
notistack is compatible with state management libraries such as Redux and Mobx. See notistack documentation for more info.
Contribution
Open an issue and your problem will be solved.
Notes
Material Design guidelines suggests that only one snackbar should be displayed at a time. But I liked to stack them. 😁 So I made notistack. But if you'd like to stick to the guidelines, you can set maxSnack
to 1
and just take advantage of enqueueSnackbar
function.
Author - Contact
Hossein Dehnokhalaji