Material-UI - 如何将自定义 Snackbar 的过渡更改为 Slide

Posted

技术标签:

【中文标题】Material-UI - 如何将自定义 Snackbar 的过渡更改为 Slide【英文标题】:Material-UI - How to change transition of Customized Snackbar to Slide 【发布时间】:2020-10-09 04:58:11 【问题描述】:

我想将snackbar 的过渡更改为Slide 而不是Grow(默认行为),但我不能这样做,因为我正在使用带有Alert 的snackbar。

这是 Material-UI 的原始演示: https://codesandbox.io/s/e1dks

如果我导入这个:

import Slide from '@material-ui/core/Slide';
import  TransitionProps  from '@material-ui/core/transitions';

创建这个函数:

function SlideTransition(props: TransitionProps) 
  return <Slide ...props direction="up" />;

并在 Snackbar 标签上插入此属性:

TransitionComponent=SlideTransition

我有错误: Cannot read property 'getBoundingClientRect' of null

查看当我尝试同时使用 Snackbar 和 Alert 和 Slide 时出现的错误 https://codesandbox.io/s/material-demo-ysub3

https://material-ui.com/api/slide/ 有一个警告可以提供帮助,但我不明白这一点: A single child content element. ⚠️ Needs to be able to hold a ref.

我正在使用带有 Typescript 的 React。

【问题讨论】:

你可以试试这个:codesandbox.io/s/yfet4?file=/demo.js:121-130 【参考方案1】:

看你的例子,控制台报错:

Warning: Failed prop type: Invalid prop `children` supplied to `ForwardRef(Slide)`. Expected an element that can hold a ref. Did you accidentally use a plain function component for an element instead? For more information see https://material-ui.com/r/caveat-with-refs-guide

在“更多信息”链接之后,它建议您需要将“普通功能组件”包装在 React.forwardRef 中。

这导致 Alert 函数从:

function Alert(props: AlertProps) 
  return <MuiAlert elevation=6 variant="filled" ...props />;

const Alert = React.forwardRef((props, ref) => <MuiAlert elevation=6 variant="filled" ...props ref=ref />);

进行此更改后,代码将按预期工作 - 警报从底部滑入而不是弹出视图。

【讨论】:

非常感谢您的帮助,我不知道如何使用forwardRef,它工作得很好。

以上是关于Material-UI - 如何将自定义 Snackbar 的过渡更改为 Slide的主要内容,如果未能解决你的问题,请参考以下文章

如何使用带有 material-ui 图标组件的自定义 SVG 文件?

如何在 Material-UI 自动完成控件中自定义填充?

如何在 material-ui 主题中导入和使用自定义字体?

如何自定义 Material-UI 和 styled-components 基于 props 的样式

如何在 Material-ui 的 TableSortText 组件中自定义彩色文本和图标?

更改自定义主题 Material-UI