reactjs TypeError:无法读取undefined的属性(阅读“down”)

jfgube3f  于 2023-04-05  发布在  React
关注(0)|答案(5)|浏览(182)

我创建了一个标题菜单。它在Material-UI V4中仍然有效。但我最近更新到Material-UI V5。但我有这样的错误:TypeError:无法读取undefined的属性(阅读'down')

import makeStyles from "@mui/styles/makeStyles";
import { Theme } from "@mui/system";

// NOTE: Styling header bar components

const useStyles = makeStyles((theme: Theme) => ({
    title: {
        flexGrow: 1,
    },
    linkStyle: {
        textDecoration: "none",
        color: "white",
        marginLeft: 5,
    },
    desktopMenuStyle: {
        display: "display",

        [theme.breakpoints.down("mobile")]: {
            display: "none",
        },
    },
    mobileMenuStyle: {
        display: "none",

        "& .MuiList-root": {
            marginTop: 40,
        },
        [theme.breakpoints.down("laptop")]: {
            display: "block",
        },
    },
}));

I have a error like this

yr9zkbsy

yr9zkbsy1#

将此代码写入包含组件的文件。
1.Import:

import { ThemeProvider } from "@mui/styles";

import { createTheme, responsiveFontSizes } from '@mui/material/styles';
let theme = createTheme();
theme = responsiveFontSizes(theme);
<ThemeProvider theme={theme}>
  <your component/>
</ThemeProvider>
s3fp2yjn

s3fp2yjn2#

例如:

mobileMenuStyle: {
    display: "none",
    "& .MuiList-root": {
        marginTop: 40,
    }
},
"@media (max-width: 1440px)": {
    mobileMenuStyle: {
      display: "block"
     }
}

取代:

mobileMenuStyle: {
    display: "none",

    "& .MuiList-root": {
        marginTop: 40,
    },
    [theme.breakpoints.down("laptop")]: {
        display: "block",
    },
},
l2osamch

l2osamch3#

用主题提供程序封装datatable组件

import { ThemeProvider } from "@mui/styles";
import { createTheme, responsiveFontSizes } from '@mui/material/styles';

然后

let theme = createTheme();
theme = responsiveFontSizes(theme);

然后

<ThemeProvider theme={theme}>
 < name of your data table compobebt >
</ThemeProvider>
t0ybt7op

t0ybt7op4#

请注意,如果您直接导入/使用组件,并且该组件试图访问主题中的数据,您将获得此错误(或类似错误,取决于您试图访问主题中的属性)。
ThemeProvider中的“theme”数据 * 不 * 传递给导入的组件(或直接在JSX中使用的组件),它只传递给组件或元素的 * 样式化 *(通过例如样式化组件或情感)。
换句话说,<MyComponent />将 * 不 * 从主题接收任何数据,但styled(MyComponent)``; * 将 * 接收主题数据。
这让我犹豫了一段时间,所以我希望它能帮助其他偶然发现它的人。

h7appiyu

h7appiyu5#

  1. import {makeStyles} from '@mui/styles';
  2. import {Theme} from '@material-ui/core';
declare module '@material-ui/core' {
    interface DefaultTheme extends Theme{}
}

const useStyles = makeStyles( (theme : any) => ({

    yourcomponent : {
        [theme.breakpoints.down('sm')] : {
         ///put your styles here 
        },

}));

相关问题