React如何解决样式污染问题

 更新时间:2023年11月14日 10:21:13   作者:埋头敲代码的小前端  
这篇文章主要介绍了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

总结

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

相关文章

  • React BootStrap用户体验框架快速上手

    React BootStrap用户体验框架快速上手

    这篇文章主要介绍了React BootStrap用户体验框架快速上手的相关知识,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2018-03-03
  • 关于react中useCallback的用法

    关于react中useCallback的用法

    这篇文章主要介绍了关于react中useCallback的用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • 详解在React项目中如何集成和使用web worker

    详解在React项目中如何集成和使用web worker

    在复杂的React应用中,某些计算密集型或耗时操作可能会阻塞主线程,导致用户界面出现卡顿或响应慢的现象,为了优化用户体验,可以采用Web Worker来在后台线程中执行这些操作,本文将详细介绍在React项目中如何集成和使用Web Worker来改善应用性能,需要的朋友可以参考下
    2023-12-12
  • useEvent显著降低Hooks负担的原生Hook

    useEvent显著降低Hooks负担的原生Hook

    这篇文章主要为大家介绍了useEvent显著降低Hooks负担的原生Hook示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • React+ts实现二级联动效果

    React+ts实现二级联动效果

    这篇文章主要为大家详细介绍了React+ts实现二级联动效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • React受控组件和非受控组件对比详解

    React受控组件和非受控组件对比详解

    在使用React搭建用户界面时,组件可以分为两类:受控组件和费受控组件这两种组件在数据处理方式上有着显著的差异,理解它们的区别对于构建高效和可控的React应用至关重要,本文将深入探讨这两种组件的定义、特点以及使用场景,并通过示例代码帮助你更加清晰地理解它们
    2025-01-01
  • React大屏可视化脚手架教程示例

    React大屏可视化脚手架教程示例

    这篇文章主要为大家介绍了React大屏可视化脚手架教程示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • 深入理解React与闭包的关系

    深入理解React与闭包的关系

    本文将深入探讨React与闭包之间的关系,我们将首先介绍React和闭包的基本概念,然后详细解释React组件中如何使用闭包来处理状态和作用域的问题,希望通过本文的阅读,你将对React中闭包的概念有更深入的理解,并能够在开发React应用时更好地应用闭包
    2023-07-07
  • React手写一个手风琴组件示例

    React手写一个手风琴组件示例

    这篇文章主要为大家介绍了React手写一个手风琴组件示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • React18新增特性介绍

    React18新增特性介绍

    react历次版本迭代主要想解决的是两类导致网页卡顿的问题,分别是cpu密集型任务和io密集型任务导致的卡顿问题,react18新增特性就是为了解决上述问题
    2022-09-09

最新评论