react项目如何防止样式污染

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;
}
  1. 在react的js文件引入:
mport index from './index.module.css'
  1. 使用
<div className={index.App}>
 123
</div>
  1. 检查
    在这里插入图片描述
    可以看到class是一堆啥玩意的名字,实际上它 是 App–<hash数值>,这个 hash 值是全局唯一的,比如通过文件路径来获得,这样 class 名称就做到了全局唯一。通过全局唯一的 CSS 命名,我们变相地获得了局部作用域的 CSS(scoped CSS)。如果一个 CSS 文件仅仅是作用在某个局部的话,我们称这样一个 CSS 文件为 CSS module。

参考

  1. css module
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
React 项目中,局部样式可以通过以下方式来实现: 1. 使用 CSS Modules:CSS Modules 是一种将 CSS 样式作用域限制在组件范围内的技术。它可以让样式表中的类名自动变成唯一的,从而避免了样式的冲突问题。要使用 CSS Modules,需要将样式文件的后缀名改为 `.module.css` 或 `.module.scss`,并在组件中通过 `import` 引入样式文件。例如: ```css /* styles.module.css */ .button { background-color: #007bff; color: #fff; } ``` ```jsx // Button.jsx import React from 'react'; import styles from './styles.module.css'; function Button() { return ( <button className={styles.button}>Click me!</button> ); } export default Button; ``` 在这个例子中,我们将样式文件的后缀名改为 `.module.css`,并在组件中通过 `import` 引入样式文件。在组件中,我们使用 `styles` 对象来访问样式中的类名,从而实现局部样式的效果。 2. 使用 CSS-in-JS 库:CSS-in-JS 库是一种将 CSS 样式嵌入到组件中的技术。它可以让样式和组件代码紧密地耦合在一起,从而减少了样式冲突的可能性。常见的 CSS-in-JS 库有 Styled Components、Emotion、Fela 等等。例如,使用 Styled Components 实现局部样式的代码如下: ```jsx import React from 'react'; import styled from 'styled-components'; const Button = styled.button` background-color: #007bff; color: #fff; `; export default Button; ``` 在这个例子中,我们使用 `styled-components` 库来创建了一个名为 `Button` 的组件,并将样式直接嵌入到组件中。这样可以确保样式只作用于当前组件,从而实现局部样式的效果。 总的来说,React 中的局部样式可以通过 CSS Modules 或 CSS-in-JS 库来实现,具体选择哪种方式取决于您的项目需求和个人偏好。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值