【发布时间】:2021-09-21 17:16:04
【问题描述】:
注意!我已经设法通过在下面的声明中使用“主题:任何”来缓解这个问题,但我更喜欢更好的方法。
我在前端使用 React (v17.0.2) 和 material-ui (v5.0.0),我收到以下错误:
“主题”类型上不存在属性“调色板”。
每当我尝试像这样访问我的主题时:
import { useTheme } from '@emotion/react';
export default function MyComponent() {
const theme = useTheme()
return (
<Box
sx={{
backgroundColor: theme.palette.mode === 'dark' ? 'primary.dark' : 'primary',
}}
></Box>
);
}
我在声明下方使用console.log(theme) 记录了该对象,它成功记录了我的主题。所以它在那里,但我无法像上图那样访问它。
以下是记录的一些内容:
{breakpoints: {…}, direction: 'ltr', components: {…}, palette: {…}, spacing: ƒ, …}
> breakpoints: {keys: Array(5), ...}
> components: {MuiTypography: {…}, ...}
direction: "ltr"
> mixins: {toolbar: {...}}
> palette: {mode: 'dark', ...}
...
另外,我找到了“主题”类型所在的文件,并且“调色板”属性肯定存在。这是文件的sn-p:
export interface Theme extends SystemTheme {
mixins: Mixins;
components?: Components;
palette: Palette;
shadows: Shadows;
transitions: Transitions;
typography: Typography;
zIndex: ZIndex;
unstable_strictMode?: boolean;
}
我也尝试过像这样导入和使用主题:
import { Theme } from '@mui/material/styles';
...
const theme: Theme = useTheme()
...
这给了我一个新错误(在“主题”变量下划线):
“主题”类型缺少“主题”类型的以下属性:mixins、调色板、阴影、过渡等等。
我也试过这样:
import { Theme } from '@mui/material/styles';
...
const theme = useTheme<Theme>()
...
这给了我一个新错误(在 useThemeTheme>() 中强调“主题”)
预期的类型参数为 0,但得到了 1。
还有
“主题”类型上不存在属性“调色板”。
我是 typescript 的新手,感谢任何帮助。
编辑 感谢 Alex Wayne 得到了答案(如果我最初误解了答案,也许还有窗台)。这是有效的代码:
import { useTheme, Theme } from '@mui/material';
const theme: Theme = useTheme()
<Box sx={{backgroundColor: theme.palette.mode}}></Box>
【问题讨论】:
-
您的 useTheme 和 Theme 似乎来自不同的库。
-
刚尝试从“@emotion/react”导入,但仍然收到“主题类型上不存在调色板”的错误
标签: reactjs typescript material-ui