react - css modules的模块化方案
文章目录一、什么是 css modules二、如何在 Vite 中使用 css modules三、解决css modules调试时类名变掉的问题为什么类名会变调试时的应对方案1. 配置保留可读类名推荐开发环境2. 使用 Source Map3. React DevTools 辅助最佳实践总结一、什么是 css modules因为 React 没有 Vue 的Scoped但是 React 又是 SPA(单页面应用)所以需要一种方式来解决 css 的样式冲突问题也就是把每个组件的样式做成单独的作用域实现样式隔离而 css modules 就是一种解决方案但是我们需要借助一些工具来实现;比如 webpackpostcsscss-loadervite 等。二、如何在 Vite 中使用 css modulescss modules可以配合各种 css 预处理去使用例如 lesssassstylus 等。npm install less-D# 安装less 任选其一 npm install sass-D# 安装sass 任选其一 npm install stylus-D# 安装stylus 任选其一[!TIP] 在Vite 中 css Modules是开箱即用的只需要把文件名设置为 xxx.module.[css|less|sass|stylus]就可以使用 css modules 了。src/components/Button/index.module.scss.button { color: red; }src/components/Button/index.tsx//使用方法直接引入即可 import styles from ./index.module.scss; export default function Button() { return button className{styles.button}按钮/button; }编译结果, 可以看到 button 类名被编译成了 button_pmkzx_6这就是 css modules 的实现原理通过在类名前添加一个唯一的哈希值来实现样式隔离。buttonclassbutton_pmkzx_6按钮/button三、解决css modules调试时类名变掉的问题在 React 中使用 CSS Modules*.module.scss时浏览器 DevTools 中看到的类名会变成类似ComponentName_hash__classname的格式这是 CSS Modules 的作用域隔离机制导致的属于正常行为。为什么类名会变CSS Modules 通过构建工具Webpack/Vite 等在编译时添加哈希值确保类名全局唯一防止样式冲突保持可读性通常保留原始类名作为前缀如Button_module_button__3x7a9调试时的应对方案1. 配置保留可读类名推荐开发环境Webpack 配置// webpack.config.js{loader:css-loader,options:{modules:{localIdentName:[local]__[hash:base64:6]// 开发环境// 生产环境: [hash:base64:8]}}}Vite 配置// vite.config.jsexportdefault{css:{modules:{// 自定义生成的类名格式 原类名短哈希generateScopedName:[local]__[hash:base64:6],}}}效果button__3x7a91原类名短哈希如图所示2. 使用 Source Map确保构建工具开启 CSS Source Map// webpackdevtool:source-map// 或 eval-source-map// vitecss:{devSourcemap:true}这样 DevTools 的 Elements 面板会显示原始类名Sources 面板可定位到 SCSS 源文件。3. React DevTools 辅助安装React Developer Tools浏览器扩展Components 面板选中组件后右侧可看到className的完整计算值配合 “Highlight updates” 功能追踪样式变化最佳实践总结// 推荐配置开发 vs 生产constcssModulesConfigisDev?[path][name]__[local]--[hash:base64:5]// 包含路径更易定位:[hash:base64:8];// 生产环境压缩这样调试时你能看到类似src-components-Button__primary--a3f9b的类名既保留了可读性又有隔离保障。点击进入我的网站
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2418475.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!