今天要讲解的内容,在前面讲解theme的应用时,有稍微讲解了一些基本的应用,官方文件内前半部的内容我就不再提及了,我们会从 Overriding styles 开始讲解。
makeStyles(hook)和 withStyles (HOC) API 允许为每个样式表创建多个样式规则,每个样式规则都有自己的类名,类名通过 classes 变量提供给组件。
// A style sheet
const useStyles = makeStyles({
root: {}, // a style rule
label: {}, // a nested style rule
});
function Nested(props) {
const classes = useStyles();
return (
<button className={classes.root}> // 'jss1'
<span className={classes.label}> // 'jss2'
nested
</span>
</button>
);
}
function Parent() {
return <Nested />
}
然而,类名通常是不确定的。父组件如何覆盖嵌套元素的样式?
包装的组件接受一个 classes 属性,它只是合并样式表提供的类名。
const Nested = withStyles({
root: {},
label: {},
})(({ classes }) => (
<button className={classes.root}>
<span className={classes.label}> // 'jss2 my-label'
Nested
</span>
</button>
));
function Parent() {
return <Nested classes={{ label: 'my-label' }} />
}
这个就是前面范例中常用的方法
const useStyles = makeStyles({
root: {},
label: {},
});
function Nested(props) {
const classes = useStyles(props);
return (
<button className={classes.root}>
<span className={classes.label}> // 'jss2 my-label'
nested
</span>
</button>
);
}
function Parent() {
return <Nested classes={{ label: 'my-label' }} />
}
如果你更喜欢 CSS 语法而不是 JSS,您可以使用 jss-plugin-template 插件。
import React from 'react';
import { jssPreset, StylesProvider, makeStyles } from '@material-ui/core/styles';
import { create } from 'jss';
import jssTemplate from 'jss-plugin-template';
const jss = create({
plugins: [jssTemplate(), ...jssPreset().plugins],
});
const useStyles = makeStyles({
root: `
background: linear-gradient(45deg, #fe6b8b 30%, #ff8e53 90%);
border-radius: 3px;
font-size: 16px;
border: 0;
color: white;
height: 48px;
padding: 0 30px;
box-shadow: 0 3px 5px 2px rgba(255, 105, 135, 0.3);
`,
});
function Child() {
const classes = useStyles();
return (
<button type="button" className={classes.root}>
String templates
</button>
);
}
function StringTemplates() {
return (
<StylesProvider jss={jss}>
<Child />
</StylesProvider>
);
}
export default StringTemplates;
後面都属 jss 应用的部分,我就不再提及了,因为之後有机会做 JSS 系列的讲解时再来补足这部分的应用。
那麽今天的内容就先到这边了,明天的会讲解 API 的部分。
写到资料库这部分,就让我想起一个小故事... 某天客户一把鼻涕一把眼泪地打电话跟我说 客户: 我们要...
案例说明及适用场景 概念上是属於暂收款的机制,但与特定商品绑定 寄仓通常都会搭配商品折扣,所以在退换...
(10/11更)私下有一些朋友反应手机不太能玩,我才想起这个问题,所以有对此demo在长版进行微调...
Instance Lifecycle Hooks Hooks到底是什麽? 中文解释就是钩子,其实Vu...
前言 接下来就是安装 Python 的部分,毕竟我们要学习 Python 就要安装 Python 呀...