【问题标题】:MUI v5 Typescript makeStyles returns neverMUI v5 Typescript makeStyles 从不返回
【发布时间】:2021-12-03 13:04:22
【问题描述】:

我正在尝试将我的组件从 MUI v4 迁移到 v5,但我已经到了不知道如何迁移我的 makeStyles 组件的地步。

以前,我有这样的工作:

const useStyles = makeStyles((theme: Theme) => ({
  paper: {
    padding: theme.spacing(2),
    someMore: 'styles'
  }
}));
// ...

const Component: FC = () => {
  const theme = useTheme();
  const classes = useStyles(theme);

   return (
      <Paper elevation={3} className={classes.paper}>
         <Stuff />
      </Paper>
   )
}

现在我在useStyles 调用时遇到错误:

此表达式不可调用。 类型 'never' 没有调用签名。ts(2349)

在这种情况下,解决方法是什么?

【问题讨论】:

  • 你能 fork thiscodesandbox 并重新创建错误吗?
  • 我已经看到了一些差异。我正在从@mui/material 导入makeStylesuseTheme。我还在根目录下看到了StyledEngineProvider。我正在使用ThemeProvider。有区别吗?我应该使用哪个?

标签: reactjs typescript material-ui jss


【解决方案1】:

您不能使用@mui/material 中的makeStyles(如果这样做,您会收到错误消息),因为它已被移动到@mui/styles,因为makeStyles 被标记为已弃用。这就是为什么类型是never;它不在那里!这个函数是空的,它的only purpose是告诉你makeStyles现在在哪里。

@mui/styles 是旧版软件包,不建议在 v5 中使用。请参阅this 回答以了解更多关于它们两者之间的差异。对于替代方案,您可以使用styled/sx prop

【讨论】:

  • 我会在星期一调查一下!
  • 感谢您的见解!如果@mui/styles 现在是旧版,我应该使用什么包?
  • @Vivere MUI v5 使用 @mui/system 并为此提供 2 个新 API styled/sx。见this
猜你喜欢
  • 1970-01-01
  • 2021-12-09
  • 2022-10-24
  • 1970-01-01
  • 2022-11-11
  • 2021-12-10
  • 2021-12-06
  • 2022-10-05
相关资源
最近更新 更多