React

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript类库 > React > React样式污染问题

React如何解决样式污染问题

作者:埋头敲代码的小前端

这篇文章主要介绍了React如何解决样式污染问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

react样式污染问题

在vue文件中我们使用scoped来进行css模块化开发,使其样式互不受影响。

但是在react中没有scoped属性, 而react中我们发现css样式设置也存在互相影响的问题。

(例如:改变全局样式,设置的样式不起效果,被其他地方的样式覆盖...)

但在react中可以利用module方法来解决:

(1)改样式文件名。从 xx.css -> xx.module.css (React脚手架中的约定,与普通 CSS 作区分)

(2)将写好的css样式引入到对应组件中。

import styles from "xxx.module.css";

 一般命名为styles

(3) 通过 styles 对象访问对象中的样式名来设置样式

注: 避免一个文件有相同的class名称,只生效一个(最后一个覆盖之前所有的)

解析完的类名是一个哈希串。

// css类名是index.module.scss中定义的类名
<div className={styles.css类名}></div>

(4)注意: css类名中如果有 '-' 则要改为styles[ css类名 ]。因为最终这个类名会生成为styles对象上的一个属性。一般推荐使用小驼峰命名法

react防样式污染小助手-css module

react与vue不同,vue可以通过在script中设置scoped来限制样式的生效范围,不至于样式污染,

CSS 的局部作用域解决了大问题。在w3c 规范中,CSS 始终是「全局的」。在传统的 web 开发中,最为头痛的莫过于处理 CSS 问题。因为全局性,明明定义了样式,但就是不生效,原因可能是被其他样式定义所强制覆盖。接手老项目更是噩梦,改对了一个地方的样式,却把另外许多地方的样式打乱。

CSS modules 是从工具层面给出的一套生成局部 CSS 的规范,本质还是生成全局唯一的 CSS 定义。webpack 实现了这套规范。

1.css modules是默认开启的,所以我们只需要将原先的.less或.css文件名称改为.module.less

例:index.css改为index.module.css

//index.module.css
.app {
  background: red;
}

2.在react的js文件引入:

import index from './index.module.css'

3.使用

    <div className={index.App}>
     123
    </div>

4.

可以看到class是一堆啥玩意的名字,实际上它 是 App--<hash数值>,这个 hash 值是全局唯一的,比如通过文件路径来获得,这样 class 名称就做到了全局唯一。

通过全局唯一的 CSS 命名,我们变相地获得了局部作用域的 CSS(scoped CSS)。

如果一个 CSS 文件仅仅是作用在某个局部的话,我们称这样一个 CSS 文件为 CSS module

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文