【发布时间】:2020-07-16 08:37:03
【问题描述】:
我创建了如下所示的三个文件。
Paper 的颜色根据theme.js 中定义的palette.type 的值而变化。
带有调色板的页面.type: 'dark'
带有调色板的页面.type: 'light'
但是,我不明白变量 theme 的工作原理。我在index.js 中添加了两个console.log(theme)。无论theme.js 中的值如何,两者都显示palette.type: 'light'。
console.log 的结果
如何将theme 传递给index.js(不导入主题)?
components/Layout.js - 将相同布局应用到所有页面的共享组件
import React from 'react';
import { MuiThemeProvider } from '@material-ui/core/styles';
import { theme } from '../utils/theme';
class Layout extends React.Component {
render() {
return(
<MuiThemeProvider theme={theme}>
{this.props.children}
</MuiThemeProvider>
)
}
}
export default Layout;
pages/index.js - 一个特定页面
import Layout from '../components/Layout';
import { makeStyles, createStyles, useTheme, Paper } from '@material-ui/core';
const useStyles = makeStyles(theme => {
console.log('inside makeStyles');
console.log(theme);
return createStyles({
container: {
margin: '5px 5px 50px 5px'
}
})
});
export default function Index(props) {
const classes = useStyles(props);
const theme = useTheme();
console.log('inside Index')
console.log(theme);
return(
<Layout>
<h2>About</h2>
<Paper className={classes.container}>
<p>Sample test</p>
</Paper>
<Paper className={classes.container}>
<p>Sample test2</p>
</Paper>
</Layout>
)
};
utils/theme.js - 单独的文件写入theme
import { createMuiTheme } from '@material-ui/core/styles';
export const theme = createMuiTheme({
palette: {
type: 'dark'
}
});
【问题讨论】:
-
我能够复制并修复该问题。
-
在您的屏幕截图中,主题仅应用于
Paper,但如果使用正确,它也应该改变页面的背景颜色。
标签: reactjs material-design material-ui next.js