Material-UI Grid 在使用 Display 时不会隐藏

gos*_*kan 8 reactjs material-ui

我想使用 MUI Grid https://material-ui.com/api/grid/,如果屏幕很小,我想隐藏一项 Grid,所以我找到了一个叫做 Display 的东西https://material-ui.com/system/display/。我的代码看起来像这样

function CRUDView() {
  return (
    <Grid
      container
      spacing={1}
      direction="row"
      justify="center"
      alignItems="center"
    >
      <Grid item xs={12} lg={6}>
        <span>XX</span>
      </Grid>
      <Grid item xs={6} display={{ xs: "none", lg: "block" }} >
        <span>YY</span>
      </Grid>
    </Grid>
  );
}

Run Code Online (Sandbox Code Playgroud)

我不明白为什么它不起作用(文本YY仍然出现)。我不能在 Grid 中使用 display 吗?如果是,那为什么?

Rya*_*ell 8

风格的功能都不会自动支持Grid组件。

利用样式函数的最简单方法是使用Box 组件。该Box组件使所有样式功能(例如display)都可用。该Box组件有一个组件属性(默认为div)以支持Box用于向另一个组件添加样式功能。

Grid组件同样有一个组件 prop,因此您可以使用Grid将其渲染委托给 a 的aBoxBox委托给 a 的 a Grid

下面的示例(基于您的代码)显示了使用BoxGrid结合的两种方式。

import React from "react";
import ReactDOM from "react-dom";

import Grid from "@material-ui/core/Grid";
import Box from "@material-ui/core/Box";
import { makeStyles } from "@material-ui/core/styles";

const useStyles = makeStyles({
  gridItem: {
    border: "1px solid red"
  }
});

function App() {
  const classes = useStyles();
  return (
    <Grid
      container
      spacing={1}
      direction="row"
      justify="center"
      alignItems="center"
    >
      <Grid className={classes.gridItem} item xs={12} lg={6}>
        <span>XX</span>
      </Grid>
      <Box
        component={Grid}
        className={classes.gridItem}
        item
        xs={3}
        display={{ xs: "none", lg: "block" }}
      >
        <span>YY</span>
      </Box>
      <Grid
        component={Box}
        className={classes.gridItem}
        item
        xs={3}
        display={{ xs: "none", lg: "block" }}
      >
        <span>ZZ</span>
      </Grid>
    </Grid>
  );
}

const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
Run Code Online (Sandbox Code Playgroud)

编辑 将系统样式函数与 Grid 一起使用


Krz*_*ski 8

Material UI 公开了一个<Hidden>组件来实现这一点。只需为特定屏幕尺寸包装要隐藏的组件:

      <Hidden xsDown >
          <p>Hide me on XS view port width.</p>
      </Hidden>
Run Code Online (Sandbox Code Playgroud)

您可以在文档中找到更多示例。


Nea*_*arl 7

MUI v5中,您可以display直接更改该值,Grid而无需再使用Box

<Grid
  item
  xs={3}
  sx={{
    display: { xs: "none", lg: "block" }
  }}
>
  <span>YY</span>
</Grid>
Run Code Online (Sandbox Code Playgroud)

Codesandbox 演示