我正在将应用程序从Material UI v4迁移到v5,我面临一些问题。其中之一是,一旦在makeStyles中使用,Material UI中的DefaultTheme就无法识别属性“palette”。该组件在v4中工作正常,但一旦我将大多数移动到v5,它就显示错误,并且无法识别'palette'属性。你能帮我看一下,然后告诉我怎么修吗?
这是它在main组件中的调用方式:import { makeStyles } from '@mui/styles';
const useStyles = makeStyles((theme) => ({
styledButton: {
'&': { color: theme.palette.cerulean },
'&.Mui-selected': {
backgroundColor: theme.palette.aliceBlue,
color: theme.palette.cerulean,
},
'&:hover': {
backgroundColor: 'rgba(227,245,255, 0.5) !important',
},
},
}));
当我悬停在上面的'调色板' TS给予这样的评论:类型“DefaultTheme”上不存在属性“palette”。
主题在App中的调用如下:
import { ThemeProvider } from '@mui/styles';
import { MainTheme } from '@nevomo/utilities';
export const App: FC = () => (
<StyledEngineProvider injectFirst>
<ThemeProvider theme={MainTheme}>
<SCThemeProvider theme={MainTheme}>
<CssBaseline />
<Router>
<AuthContextProvider>
<Notifications />
<RoutingManager />
</AuthContextProvider>
</Router>
</SCThemeProvider>
</ThemeProvider>
</StyledEngineProvider>
);
MainTheme看起来像:
import { createTheme, Theme } from '@mui/material/styles';
import { paletteColors } from './main-theme-colors';
export const MainTheme: Theme = createTheme({
spacing: (factor: number) => `${factor * 1}rem`,
palette: {
primary: {
main: paletteColors.primary.main,
},
secondary: {
main: paletteColors.secondary.main,
},
error: {
main: paletteColors.error.main,
},
white: '#FFFFFF',
lighterBlue: '#EFFBFF',
lightBlue: '#DEF7FF',
celeste: '#00A7E1',
blue: '#0027d3',
navy: '#083D77',
greenSalad: '#4DA167',
red: '#d32f2f',
pink: '#FFE3E3',
lightPink: '#ECD6E6',
darkPink: '#700353',
black: '#000000',
orange: '#FD5C01',
darkRed: '#AD160B',
aliceBlue: '#E3F5FF',
cerulean: '#007CBA',
},
});
非常感谢!
3条答案
按热度按时间ecbunoof1#
OP解决了他们的问题,但我将从MUI迁移文档中留下,以供将来面临同样问题的人使用:
[Types] Property“palette”,“spacing”does not exist on type 'DefaultTheme'
因为
makeStyles
现在是从@mui/styles
包导出的,而@mui/styles
包不知道核心包中的Theme
。要解决这个问题,需要用核心中的Theme
来扩充@mui/styles
中的DefaultTheme
(空对象)。TypeScript项目
将此代码段放入主题文件:
Javascript项目
如果您的IDE(例如VSCode)能够从
d.ts
文件中推断类型,使用以下片段在src文件夹中创建index.d.ts
:hs1ihplo2#
当前的MUI版本以这种方式修复了
DefaultTheme
类型错误-dtcbnfnu3#
我正在使用v4,我正在解决这个问题。
问题是因为我用了
而不是