React
样式作为模块导入,类名通过对象属性引用。
在线预览
局部作用域卡片
JSX 使用 styles.card,构建后生成唯一类名。
组件关系与数据流
ComponentBuildStyle
差异焦点CSS 以模块对象进入 JavaScript,类名引用是显式的。
实线表示依赖、数据或命令传递,虚线表示事件、回调或清理路径。
flowchart TB
accTitle: React CSS Modules 显式导入流程
accDescr: 独立 module CSS 文件在构建时生成唯一类名和 JavaScript 映射,ReactDemo 必须 import styles 并通过 className 显式读取映射。
source[("ReactDemo.module.css")] --> build{{"构建时生成局部类名"}}
build --> mapping[("styles 对象映射")]
mapping -->|"import styles"| demo["ReactDemo.tsx"]
demo -->|"className={styles.card}"| dom[("DOM 唯一类名")]
class demo component
class build process
class source,mapping,dom resource
classDef state fill:#ffffff,stroke:#149eca,color:#172033,stroke-width:1.2px
classDef component fill:#e5f6fb,stroke:#149eca,color:#172033,stroke-width:2px,font-weight:600
classDef process fill:#f4fbfd,stroke:#149eca,color:#172033,stroke-width:1.6px
classDef resource fill:#f3f5f8,stroke:#778195,color:#172033,stroke-width:1.4px样式文件与组件文件分离,通过 import 和 styles.* 显式绑定生成类名。
实际运行源码
import styles from "./ReactDemo.module.css";
export function ReactDemo() { return ( <section className={styles.card}> <span className={styles.badge}>CSS Modules</span> <h2>局部作用域卡片</h2> <p> JSX 使用 <code>styles.card</code>,构建后生成唯一类名。 </p> <span className={styles.button}> 仅影响当前组件 </span> </section> );}.card { display: grid; gap: 0.75rem; padding: 1.1rem; border: 1px solid #83c9df; border-radius: 0.85rem; color: #12384a; background: #eafaff;}
.card h2,.card p { margin: 0;}
.badge { width: max-content; border-radius: 999px; padding: 0.2rem 0.55rem; color: #07566f; font-size: 0.7rem; font-weight: 800; background: #c7f2ff;}
.button { width: max-content; border: 0; border-radius: 0.55rem; padding: 0.55rem 0.75rem; color: #fff; font: inherit; font-size: 0.78rem; font-weight: 750; background: #087ea4;}