reactjs - 在 React 组件中使用全局 SASS 变量
问题描述
JS 文件中 SCSS 文件的每次导入都被视为一个孤立的 SASS 环境,因此,在 React 中使用 SCSS 时没有“全局变量”这样的东西。这种行为要求我们将variables.scss
文件导入到使用其中一个变量的每个 SCSS 文件中。
_variables.scss
$global-font : "Cairo", sans-serif;
$global-background: whitesmoke;
App.js
import './App.scss'
export function App()
{
return (
<div className="App"></div>
)
}
App.scss
@import "variables.scss";
.App {
background-color: $global-background;
font-family: $global-font;
// ...
}
Header.js
import './Header.scss'
export function Header()
{
return (
<div className="Header"></div>
)
}
Header.scss
@import "variables.scss";
.Header {
background-color: $global-background;
font-family: $global-font;
// ...
}
我必须将 _variables.scss 文件导入多个(可能 100 多个)其他 SCSS 文件以使用这些变量。这样做会增加捆绑包的大小吗?
PS 该variables.scss
文件仅包含 SCSS 变量,没有其他内容。
解决方案
如果它只是变量,那么它不会使输出膨胀,但是如果您导入的文件做得更多,那么它可能会增加您的构建输出,根据 SCSS文档
使用@import 每个样式表都会在每次@imported 时执行并发出其CSS,这会增加编译时间并产生臃肿的输出。
我建议使用css variables
你的全局变量。只需在入口时加载的主样式表中声明一次
:root {
--var-one: something;
--var-two: something;
}
并在任何地方使用它们,
// in stylesheets
.someclass {
...
font-size: var(--var-one);
}
//or even in jsx
<component style={{fontSize: 'var(--var-one)'}} />
推荐阅读
- ios - 如何在不重复的情况下在部分中设置 UITableViewCell backgroundColor?
- matlab - 如何在MATLAB的for循环中定义一个特殊的矩阵函数?
- mongodb - $filter 如果属性不存在
- c++ - 将 lambda 的“-Werror=subobject-linkage”作为标头中的模板参数:拒绝这个的原因是什么?
- python-3.x - 如何将要测试的模块导入到测试模块中
- javascript - 通过链接在 Discord 附件中使用 PHP 生成的图像
- laravel - 在 api.php 和 web.php 中定义同名的路由
- node.js - Socket.io Letsencrypt 和 CORS 上的安全连接失败
- laravel - 无法使用 phpunit 运行测试套件
- sql - 将 SQL 自联接查询转换为 data.table 语法