组样式加载器
您可以使用group-style-lader 覆盖组件的样式。此加载器为您提供了一种简单直观的方式来覆盖组件的样式。
-
安装加载器
npm install --save-dev group-style-loader
-
在你的 webpack 设置中配置加载器
module.exports = {
module: {
rules: [
{
test: /\.css$/i,
use: [
'group-style-loader',
'style-loader',
{
loader: "css-loader",
options: {
modules: true
}
}
]
}
]
}
};
您只需将它放在style-loader 或mini-css-extract-plugin 加载程序之前。
覆盖组件的样式
下一个示例展示了如何从 App 组件中覆盖 Card 组件的样式。
您可以按照自己的习惯定义组件的样式。
card.css
.container {
width: 300px;
height: 400px;
border-radius: 8px;
}
.title {
font-weight: bold;
font-size: 24px;
}
.summary {
margin-top: 24px;
font-size: 20px;
}
唯一的区别是在卡片组件中,你要使用mergeStyle函数将自定义样式与组件的默认样式合并。
card.jsx
import React from 'react';
import { mergeStyle } from './card.css';
export function Card({ customStyle }) {
const style = mergeStyle(customStyle);
return (
<div className={style.container}>
<div className={style.title}>Title</div>
<div className={style.summary}>
Lorem ipsum dolor sit amet, consectetur
adipiscing elit, sed do eiusmod tempor.
</div>
</div>
)
}
然后,在App组件中,要覆盖Card组件的样式,你需要使用分隔符@定义Card组件的自定义样式987654330@。所有使用此分隔符的类都将被分组到样式对象的 card 属性中。
app.jsx
.title {
font-size: 32px;
font-weight: bold;
margin: 44px;
}
.list {
display: flex;
}
.card_title {
color: blue;
}
.card_summary {
color: green;
}
最后,只需要通过它的customStyle属性传递卡片组件的自定义样式即可。
app.jsx
import React from 'react';
import { Card } from './card';
import { style } from './app.css';
export function App() {
return (
<div>
<h1 className={style.title}>Group style</h1>
<div className={style.list}>
<Card/>
<Card customStyle={style.card}/>
</div>
</div>
);
}
在前面的示例中,您有两个卡片组件,第一个使用其默认样式,第二个使用我们定义的自定义样式。
您可以在其repository 中查看有关如何使用group-style-loader 的完整说明。