Snackbar通过MaterialUI在对话框上

Col*_*rdo 5 reactjs material-ui

我将React与Material UI库一起使用,并且具有以下组件层次结构:

<RootContainer>
  <SnackBar />
  <HomeContainer>
    <LoginModal />
  </HomeContainer>
</RootContainer>
Run Code Online (Sandbox Code Playgroud)

我的问题是,即使Snackbar的zIndex增加到,它也会显示在LoginModal的下面9999

在此处输入图片说明

将Snackbar 放置在模态(或更确切地说,模态的背景)上的正确方法是什么?

Jo *_*Lee 12

我发现的最好的方法是使用 Portal 来包裹 Snackbar 组件 https://material-ui.com/api/portal/ 例如,假设你有一个 Snackbar 类在对话框打开时被触发

<Portal>
<SnackBar/> 
<Portal/>
Run Code Online (Sandbox Code Playgroud)

这样你就可以在 Dialog 的不透明背景之上获得一个 Snackbar

  • 为我工作。谢谢 (2认同)

Ken*_*ory 2

您使用的是哪个版本的material-ui?我无法在最新的 v1-beta 中重现此内容: https: //codesandbox.io/s/084v1z2qn

我也尝试使用 v0.x 重现此内容,但无济于事。

如果您使用的是 v0.x,请检查您的主题。 Snackbar使用属性中定义的值zIndex(请参阅实现)。从默认值中,您可以看到snackbar高于modal.

theme.zIndex.snackbar检查和的值theme.zIndex.modal。Snackbar 应该更高。如果不是这种情况,则您已经从默认主题中自定义了主题,并且可以简单地更改您的主题。

如果主题看起来正确,请检查您应用于对话框、Snackbar、模态等的样式和类。我提到这一点是因为您的问题提到尝试将 Snackbar 设置z-index999. 主题默认modal1300,因此问题中指定的 值999太低。如果你搞乱了z-index,你就不再依赖主题配置,所以你的错误可能就在那里。

由于默认情况下,material-ui 的两个发行分支都处理 z-index,并且此问题无法轻松重现,因此我很确定问题出在您的样式中。

请随意包含一个带有可复制案例的代码和盒子,我会再看一下。