Snackbar
Snackbar(也称为 toasts)用于简要通知已执行或将要执行的进程。
简介
Snackbar 组件临时出现并浮动在 UI 之上,以便为用户提供关于应用程序进程的(非关键性)更新。下面的演示灵感来源于 Google Keep,展示了一个带有文本元素和两个操作的基本 Snackbar
用法
Snackbar 与 Alerts 的不同之处在于,Snackbar 具有固定的位置和较高的 z-index,因此它们旨在脱离文档流;另一方面,Alerts 通常是文档流的一部分——除非它们用作 Snackbar 的子组件。
Snackbar 也不同于 Dialogs,因为 Snackbar 不旨在传达关键信息或阻止用户与应用程序的其余部分进行交互;相比之下,Dialogs 需要用户输入才能被关闭。
基础知识
导入
import Snackbar from '@mui/material/Snackbar';
位置
使用 anchorOrigin
属性来控制 Snackbar 在屏幕上的位置。
内容
import SnackbarContent from '@mui/material/SnackbarContent';
使用 Snackbar Content 组件向 Snackbar 添加文本和操作。
与浮动操作按钮一起使用
如果您在移动设备上使用浮动操作按钮,Material Design 建议将 snackbar 直接放置在其上方,如下面的演示所示
补充组件
notistack
借助命令式 API,notistack 让您可以垂直堆叠多个 Snackbar,而无需处理它们的打开和关闭状态。即使这在 Material Design 指南中是不鼓励的,但这仍然是一种常见的模式。
无障碍性
用户应该能够通过按 Escape 键来关闭 Snackbar。如果同时出现多个实例,并且您希望 Escape 仅关闭当前打开的最旧的实例,请在 onClose
属性中调用 event.preventDefault
。
export default function MyComponent() {
const [open, setOpen] = React.useState(true);
return (
<React.Fragment>
<Snackbar
open={open}
onClose={(event, reason) => {
// `reason === 'escapeKeyDown'` if `Escape` was pressed
setOpen(false);
// call `event.preventDefault` to only close one Snackbar at a time.
}}
/>
<Snackbar open={open} onClose={() => setOpen(false)} />
</React.Fragment>
);
}
解剖
Snackbar 组件由一个根 <div>
组成,该根 <div>
容纳内部元素,如 Snackbar Content 和其他可选组件(如按钮或装饰器)。
<div role="presentation" class="MuiSnackbar-root">
<div class="MuiPaper-root MuiSnackbarContent-root" role="alert">
<div class="MuiSnackbarContent-message">
<!-- Snackbar content goes here -->
</div>
</div>
</div>
实验性 API - Toolpad
useNotifications
您可以使用 @toolpad/core
中的 useNotifications()
API 以命令式方式创建和操作通知。此 API 为打开和关闭 snackbar 提供状态管理。它还允许一次排队多个通知。