PostCSS Modules在React中导入后类名报undefined怎么办?
用PostCSS Modules写React组件时,按文档导出了CSS类名,但页面报错“Cannot read properties of undefined (reading ‘container’)”。代码明明按规范写了,是不是哪里配置错了?
组件这样写的:
import styles from './Button.module.css';
function Button() {
return <button className={styles.container}>Click</button>;
}
export default Button;
已经确认CSS文件确实有.container类,也试过改用.css.js扩展名,但问题依旧。是不是PostCSS插件没配好?
你需要确认两点:
1. 确保你安装了postcss-modules这个插件:
npm install --save-dev postcss-modules
2. 在postcss.config.js里加上它,配置类似这样:
另外,Webpack的配置中要确保处理CSS的loader里,使用了CSS Modules的模式。一般loader配置像这样:
如果你用的是Create React App,默认就已经支持CSS Modules,这时候直接用
最后检查一下你的组件代码,导出的类名是否拼写正确,比如styles.container和CSS文件里的.container是否完全匹配。有时候样式没生效,也可能是CSS模块化后类名生成规则的问题。可以用浏览器调试看最终类名生成了什么,再回过头核对。
styles就会是个空对象,自然就读不到container。先检查你的Webpack配置,应该是少了
css-loader的modules选项。正确的配置大概是这样的:如果你用的是Vite,那就得确保
vite.config.js里有类似的配置:另外再确认一下,
Button.module.css文件里的.container类名是不是拼写正确,别大小写搞错了。CSS Modules对类名区分大小写的,服务端渲染时尤其容易踩这个坑。最后重启下开发服务器,应该就能正常了。要是还报错,就看看控制台有没有其他警告信息,有时候问题是链式的,解决了主问题副问题就没了。