Material-UI React TypeScript组件样式错误与默认主题相关

3
我正在将Material-UI (v4.4.3)集成到一个React (v16.9.2) TypeScript (v3.6.3)网站中。使用样例AppBar组件示例https://material-ui.com/components/app-bar/和TypeScript指南https://material-ui.com/guides/typescript/#typescript,我有以下函数组件。
然而,在这一行,我得到了关于useStyles()的TS错误。
const classes = useStyles();

(TS): 期望得到一个参数,但却没有得到。

import * as React from 'react';

import { createStyles, Theme, makeStyles } from '@material-ui/core/styles';
import AppBar from '@material-ui/core/AppBar';
import Toolbar from '@material-ui/core/Toolbar';
import Typography from '@material-ui/core/Typography';
import Button from '@material-ui/core/Button';
import IconButton from '@material-ui/core/IconButton';
import MenuIcon from '@material-ui/icons/Menu';

const useStyles = makeStyles(({ spacing }: Theme) =>
  createStyles({
    root: {
      flexGrow: 1,
    },
    menuButton: {
      marginRight: spacing(2),
    },
    title: {
      flexGrow: 1,
    },
  }),
);

export default function ButtonAppBar() {
  const classes = useStyles();

  return (
    <div className={classes.root}>
      <AppBar position="static">
        <Toolbar>
          <IconButton edge="start" className={classes.menuButton} color="inherit" aria-label="menu">
            <MenuIcon />
          </IconButton>
          <Typography variant="h6" className={classes.title}>
            MSC
          </Typography>
          <Button color="inherit">Login</Button>
          )}
        </Toolbar>
      </AppBar>
    </div>
  );
}

我想使用默认主题。我有什么遗漏吗?


从文档和示例中我并不完全清楚的是,如果有的话,你需要做什么才能使默认主题对所有组件可用。 - ChrisP
2个回答

2
尝试传递一个空对象:
const classes = useStyles({});

1
不幸的是,这会导致一个“TypeError: spacing不是一个函数”的错误。 - ChrisP
我复制并粘贴了您的代码,并按照答案中所示将{}传递给useStyles函数。没有发生错误。 - Kevin

1
尝试使用以下组件:
import AppBar from "@material-ui/core/AppBar"
import XXX from "@material-ui/core/xxx"

XXX = 其他组件

我的依赖关系如下:

  • dependencies : "@material-ui/core": "^4.9.14"
  • devDependencies : "@types/material-ui": "^0.21.7"

别忘了在你的项目中导入@types/material-ui devDependencies。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接