有没有办法在反应中使用 JS 动态更新 scss 变量?

Posted

技术标签:

【中文标题】有没有办法在反应中使用 JS 动态更新 scss 变量?【英文标题】:Is there a way to dynamically update scss variables using JS in react? 【发布时间】:2021-02-20 02:13:29 【问题描述】:

问题

我在colors.scss 文件中有两个 scss 变量 位置,我想根据逻辑从 javascript 仅更新变量颜色 ,

if(day)
  // update $backgroundColor to white
else
  // update $backgroundColor to black

更多信息:

我尝试过 :export 不起作用,也尝试过 document.documentElement.style.setProperty 使用全局 css 变量。我正在使用 reactjs 进行前端开发。

【问题讨论】:

您可以使用 classnames 包来帮助您管理 javascript 中的 scss 类。 【参考方案1】:

您可以将 css 变量分配给$backgroundColor as

:root 
  --background-color: white;

$backgroundColor: var(--background-color);

并将js中的变量更新为

 const day = true;
 const root = document.documentElement;
 root.style.setProperty('--background-color', day ? 'white' : 'black');

【讨论】:

【参考方案2】:

您无法更新 scss 变量,因为它们在运行时(运行 JS 时)不存在。

您可以创建 2 个类,每种样式一个,并在运行时应用其中一个类。

【讨论】:

在某种程度上你是对的,我们不能直接更新 scss 变量,因此有一个 css 变量占位符有助于动态更新。

以上是关于有没有办法在反应中使用 JS 动态更新 scss 变量?的主要内容,如果未能解决你的问题,请参考以下文章

Ext js动态更新分页工具栏的总数

有没有办法对使用 discord.js 发送的每条消息做出反应

动态 JS 频道菜单链接问题

SCSS 文件在使用 Webpack 做出反应时未编译为 CSS

有没有办法对通过 Azure 移动服务同步更新的本地 Sqlite 做出反应?

如何在反应原生 Firebase 动态链接中从收到的链接中提取参数?