【发布时间】:2020-11-15 11:35:15
【问题描述】:
我有一个包含以下文件的 React 组件:
- src/components/HomePage/index.js
- src/components/HomePage/style.scss
组件很简单:
import React from 'react';
import './style.scss';
const HomePage = () => {
return (
<div className="homepage">
<h1>Landing page</h1>
</div>
);
};
export default HomePage;
在style.scss 内,我将样式应用于所有<h1> 标签:
h1 {
color: #f3f3f3;
font-family: "Cambria";
font-weight: normal;
font-size: 2rem;
}
它按预期工作。但是,我现在看到styles.scss 中的 h1 样式正在应用于我网站上的每个 h1,甚至在不使用此组件的页面上也是如此。
我正在使用 Gatsby,但它本质上是一个 React 应用程序。我的理解是 React 的代码拆分功能会解决这个问题,来自 style.scss 的代码只会包含在使用我的组件的任何页面的捆绑包中。
这就是我要问的原因。我有两个简单的解决方法:
- 将
style.scss中的所有内容包装在.homepage包装器中 - 使用 CSS 模块并将文件重命名为
style.module.scss。当我看到人们这样做时,他们总是从 './style.module.scss' 导入样式 - 有没有办法拥有 CSS 模块而不将其分配给这样的对象?
更新:在 React 花了很多时间之后回到这个问题,我认为 React 样式市场存在差距。我认为 CSS 模块在语法上很差,必须手动将所有内容包装在 .home 标记中以对其进行本地化,这是我不想做的手动工作。真的应该有人创建一个自动执行此操作的 React 插件,这样每当我有一个名为 Home.js 的文件并导入 Home.css 时,所有 CSS 都会自动限制为 Home.js,而无需我做任何特别的事情。
【问题讨论】:
-
我知道 CSS 模块只会为我完成将我的 CSS 包装在父标签中的工作。我的问题实际上是关于为什么代码拆分不能解决这个问题?我认为代码拆分的全部意义在于 JS/CSS 在需要时才加载。
标签: javascript css reactjs css-modules