无法在 React 中正确使用 SASS/SCSS 样式

Posted

技术标签:

【中文标题】无法在 React 中正确使用 SASS/SCSS 样式【英文标题】:Can't style with SASS/SCSS in React properly 【发布时间】:2021-04-13 14:11:23 【问题描述】:

获取这个 SCSS 样式表:

@import "../vars";

img.userIcon 
  &.regular 
    max-width: 64px;
    max-height: 64px;
  
  &.small 
    max-width: 32px;
    max-height: 32px;
  
  border-radius: 50%;
  border: 2px solid $bg-light;

究竟如何让我的页面识别.regular.small

这是我的UserIcon.tsx,应用了这种样式:

import styles from "../styles/components/UserIcon.module.scss";

type Props = 
    src: string,
    variant?: "regular" | "small"

export default function UserIcon( src, variant = "regular" : Props) 
    return <img className=`$styles.userIcon $variant mb-2` src=src />

现在,这显然行不通,因为在某些地方,类名都混杂在一起,看起来像这样:

<img class="UserIcon_userIcon__1jFAP regular mb-2">

这很奇怪,因为它不会对我导入的 boostrap scss 文件执行此操作。

所以我需要知道:

如何删除类名重命名。 如何正确实现.regular.small,使其使用混乱的名称。

【问题讨论】:

这被称为“CSS 模块”,它们是非常非常好的东西。不管你信不信,你想要那些“混乱”的类名。类名成为全局唯一的字符串,允许您在不相互冲突的不同文件中拥有相同的类名。缺点是必须通过导入的 css 对象翻译所有类名。但这是值得的。 【参考方案1】:

variant 作为关键参数传递给您的样式对象:

return <img className=`$styles.userIcon $styles[variant] mb-2` src=src />

【讨论】:

这行得通!但是有什么办法可以禁用重命名? 我相信使用 CSS 模块的原因之一是生成唯一的类名以避免名称冲突。 medium.com/@pioul/modular-css-with-react-61638ae9ea3e.【参考方案2】:

你能试试这样的吗?

@import "../vars";

img.userIcon 
  border-radius: 50%;
  border: 2px solid $bg-light;

img.regular 
    max-width: 64px;
    max-height: 64px;
  
img.small 
    max-width: 32px;
    max-height: 32px;
  
import styles from "../styles/components/UserIcon.module.scss";

type Props = 
    src: string,
    variant?: "regular" | "small"

export default function UserIcon( src, variant = "regular" : Props) 
    return <img className=`$styles.userIcon $styles[variant] mb-2` src=src />

告诉我它是否解决了你的问题

【讨论】:

没有解决我的问题,因为现在它根本不会应用任何样式,甚至边框半径都不会,就好像它根本找不到类一样。 嗯,很奇怪 你可以试试&lt;img className="userIcon" src=src /&gt; plaese 是的,我做到了。有些东西正在改变我的班级名称。这是它们在运行页面时的外观:i.imgur.com/S8MsEz4.png 我现在需要你用什么来配置 scss/sass

以上是关于无法在 React 中正确使用 SASS/SCSS 样式的主要内容,如果未能解决你的问题,请参考以下文章

未捕获的类型错误:WEBPACK_IMPORTED_MODULE_1__.default 未定义(React、SASS、SCSS)

如何使用 Gulp 从 SASS/SCSS 中缩小和 Autoprefixer CSS 文件

将 Sass/Scss 全局加载到 Vue 项目中

sass scss less 的编译工具 koala

NuxtJS & SASS Loader - 在生产环境中使用 sass-loader (SCSS) 构建

React 相关开发工具