react module.scss 避免全局冲突类似vue中scoped

创建 index.module.scss 文件

复制代码
src/
  components/
    MyComponent/
      index.module.scss
      index.tsx

2. 编写 index.module.scss 内容

复制代码
// src/components/MyComponent/index.module.scss

.container {
  padding: 20px;
  background-color: #f0f0f0;

  .title {
    font-size: 24px;
    color: #333;
  }

  .button {
    background-color: #007bff;
    color: white;
    padding: 10px 20px;
    border: none;
    border-radius: 5px;

    &:hover {
      background-color: #0056b3;
    }
  }
}

在 React 组件中使用 index.module.scss

复制代码
import React from 'react';
import styles from './index.module.scss'; // 引入样式文件

const MyComponent: React.FC = () => {
  return (
    <div className={styles.container}>
      <h1 className={styles.title}>Hello, World!</h1>
      <button className={styles.button}>Click Me</button>
    </div>
  );
};

export default MyComponent;

CSS 模块化的优势

  • 局部作用域:样式只作用于当前组件,不会影响其他组件。
  • 避免命名冲突:CSS 模块会自动生成唯一的类名,避免全局样式冲突。
  • 支持 SCSS 语法:可以使用嵌套、变量、混合等 SCSS 特性。

如果需要根据条件动态添加类名,可以使用模板字符串或 classnames 库

复制代码
import React from 'react';
import styles from './index.module.scss';
import classNames from 'classnames'; // 引入 classnames 库

const MyComponent: React.FC<{ isActive: boolean }> = ({ isActive }) => {
  return (
    <div
      className={classNames(styles.container, {
        [styles.active]: isActive, // 根据条件添加类名
      })}
    >
      <h1 className={styles.title}>Hello, World!</h1>
      <button className={styles.button}>Click Me</button>
    </div>
  );
};

export default MyComponent;
相关推荐
跳动的梦想家h19 分钟前
环境配置 + AI 提效双管齐下
java·vue.js·spring
Mr Xu_1 小时前
Vue 3 中 watch 的使用详解:监听响应式数据变化的利器
前端·javascript·vue.js
AAA阿giao1 小时前
从零拆解一个 React + TypeScript 的 TodoList:模块化、数据流与工程实践
前端·react.js·ui·typescript·前端框架
一 乐2 小时前
校园二手交易|基于springboot + vue校园二手交易系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端
科技D人生2 小时前
Vue.js 学习总结(20)—— Vue-Office 实战:word、pdf、excel、ppt 多种文档的在线预览
vue.js·word·vue-pdf·stylesheet·docx-preview·vue-office
vx1_Biye_Design2 小时前
基于Spring Boot+Vue的学生管理系统设计与实现-计算机毕业设计源码46223
java·vue.js·spring boot·spring·eclipse·tomcat·maven
vx_Biye_Design2 小时前
基于Spring Boot+vue的湖北旅游景点门票预约平台的设计--毕设附源码29593
java·vue.js·spring boot·spring cloud·servlet·eclipse·课程设计
hedley(●'◡'●)2 小时前
基于cesium和vue的大疆司空模仿程序
前端·javascript·vue.js·python·typescript·无人机
qq5_8115175152 小时前
web城乡居民基本医疗信息管理系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】
前端·vue.js·spring boot
百思可瑞教育2 小时前
构建自己的Vue UI组件库:从设计到发布
前端·javascript·vue.js·ui·百思可瑞教育·北京百思教育