javascript - 我们在哪里可以定义 React 中 Material-UI 的主题
问题描述
在为基于Material-UI的前端 设置样式时,我感到很困惑。
theme
下面的示例代码来自哪里,主题的效果是什么?
import React from "react";
import Container from "@material-ui/core/Container";
const useStyles = makeStyles(theme => ({
root: {
height: "100%"
}
}));
const Sample = props => {
const classes = useStyles();
return (
<Container className={classes.root}/>
);
}
解决方案
有一个主题提供者,称为ThemeProvider
<ThemeProvider theme={outerTheme}>
<Checkbox defaultChecked />
<ThemeProvider theme={innerTheme}>
<Checkbox defaultChecked />
</ThemeProvider>
</ThemeProvider>
它为子组件提供主题,我们通常在项目的顶层定义它。
然后你可以Theme
通过多种方式访问上面定义的
例如,对于经典组件,我们有withTheme HOC
import { withTheme } from '@material-ui/core/styles';
function DeepChildRaw(props) {
return <span>{`spacing ${props.theme.spacing}`}</span>;
}
const DeepChild = withTheme(DeepChildRaw);
对于功能组件,我们有useTheme钩子
import { useTheme } from '@material-ui/core/styles';
function DeepChild() {
const theme = useTheme();
return <span>{`spacing ${theme.spacing}`}</span>;
}
你可以像往常一样在makeStyles和createStyles中使用它们
import { makeStyles } from '@material-ui/core/styles';
const useStyles = makeStyles(theme => ({
root: {
width: theme.spacing(1);
}
}));
import { createStyles } from '@material-ui/core/styles';
const styles = (theme: Theme) => createStyles({
root: {
width: theme.spacing(1);
}
})
推荐阅读
- spring-mvc - Getmapping 如何使用 spring MVC (thymleaf) 从 Form 中获取价值?
- spring-batch - Job of Jobs - 将作业作为子作业运行,也可以独立运行
- tensorflow - 带有 RTX 3080 的 CUDA 11 是否支持 tensorflow 和 keras?
- python-3.x - 从复制的一维数组构建一个 4D 矩阵
- php - 如何在laravel中将刀片文件转换为pdf和图像
- python - 使用opencv实时检测单个形状和颜色
- python - BeagleBone BLUE:如何在启动时启动磁力计
- python - 使用 psycopg2 在 Django 中保护原始 SQL 查询
- ios - 当源代码被组织到嵌套组文件夹中时,podspec 中的 source_files
- android - 有没有办法改变 Kotlin 中的三重值?