React的CSS模块化(class和className)

1、外部引用需要使用className,react默认不支持class。

如果想使用传统的class来获取样式,需要下载安装react-html-attrs插件。

npm install babel-plugin-react-html-attrs --save-dev

2、安装完成之后
<1>在package.json文件里面存在如下配置

"devDependencies": {
    "babel-plugin-import": "^1.13.0",
    "babel-plugin-react-html-attrs": "^2.1.0",
    "prop-types": "^15.7.2"
  }

<2>在webpack.config.js大概380行左右的位置加入 'react-html-attrs’
如图:

plugins: [
                  [
                    require.resolve('babel-plugin-named-asset-import'),
                    {
                      loaderMap: {
                        svg: {
                          ReactComponent:
                            '@svgr/webpack?-svgo,+titleProp,+ref![path]',
                        },
                      },
                    },
                  ],
                    'react-html-attrs' //解决className问题
                ],

然后重启项目。

3.React是单页面应用,引用CSS样式默认都是全局的,这样会引起样式冲突,降低性能。
Vue里面的解决方案是使用scoped:

<style scoped>
</style>

react里面需要配置webpack.config.js解决:

1)版本2.*.*
**第一种(官方):
{
	test:cssModuleRegex,
	use:getStyleLoaders({
		importLoaders:1,
		sourceMap:isEnvProduction && shouldUseSourceMap,
		//开启模块化
		modules:true, 
		//getLocalIdent:getCSSModuleLocalIdent,
		//显示路径:
		localIdentName:'[local]_[hash:base64:6]'//[path]-[name]-[local]-[hash:base64:6]
	}),
},
**第二种
{
	test:cssRegex,
	//exclude:cssModuleRegex,
	use:getStyleLoaders({
		importLoaders:1,
		sourceMap:isEnvProduction && shouldUseSourceMap,
		//开启模块化
		modules:true, 
		//getLocalIdent:getCSSModuleLocalIdent,
		//显示路径:
		localIdentName:'[local]_[hash:base64:6]'//[path]-[name]-[local]-[hash:base64:6]
	}),
	exclude:[//排除这两个文件夹下面的css文件
		path.join(__dirname,'..','node_modules')
		path.join(__dirname,'..','src/assets/css/common')
	],
},2)版本3.*.*,modules:true改为module:{}
**第一种(官方){
	test:cssModuleRegex,
	use:getStyleLoaders({
		importLoaders:1,
		sourceMap:isEnvProduction && shouldUseSourceMap,
		//开启模块化
		modules:{
			//显示路径:
			localIdentName:'[local]_[hash:base64:6]'//[path]-[name]-[local]-[hash:base64:6]
		},
	}),
},
**第二种
{
	test:cssRegex,
	//exclude:cssModuleRegex,
	use:getStyleLoaders({
		importLoaders:1,
		sourceMap:isEnvProduction && shouldUseSourceMap,
		//开启模块化
		modules:{
			//显示路径:
			localIdentName:'[local]_[hash:base64:6]'//[path]-[name]-[local]-[hash:base64:6]
		},
	}),
	exclude:[//排除这两个文件夹下面的css文件
		path.join(__dirname,'..','node_modules')
		path.join(__dirname,'..','src/assets/css/common')
	],
},
第三种:sassModuleRegex也要修改,同上

应用:

import Css from "./style.module.css";
class A extends Component{
	render(){
		return(
			<div className={Css["app"] + " " + Css["active"]}>//模块化
				......
			</div>
		)
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值