一文讲清楚React中CSS的引入方式

一文讲清楚React中CSS的引入方式

1. 概述

  • 在进行React组件开发的时候,难免要写一些CSS样式,比如我们要根据不同的业务业务逻辑,定义不同颜色的按钮,那么如何把CSS样式合理的引入到React,成为了组件的实现关键一步
  • 我们希望他拥有下面几个特点:
    • 局部编写,不相互污染
    • 支持动态编写,可以根据组件的状态生成不同的样式
    • 支持所有css特性
    • 符合css风格
  • 这点vue做的是非常好的,React表现如何呢,且看下文

2. CSS引入方式

2.1 在组件内直接使用

  • 直接在组件中编写css样式变量,让后通过style属性绑定
import React from 'react'
const spanStyle={
    color:'red',
}
function App(){
    return(
        <span style={spanStyle}>再组件内直接使用</span>
    )
}
export default App
  • 这种方式的有点在于样式之间不会有冲突,而且可以轻松拿到state的值
  • 缺点是样式属性需要使用驼峰写法,属性值需要用引号包裹,不仅写法繁琐,而且会出现没有提示等问题,还会造成篇幅冗长等问题

2.2 组件中引入css文件

  • 我们把CSS样式单独抽离一个css文件,然后再在组件中进行导入
  • 比如新建一个App.css
    .red-span{
      color:red
    }
    
import React from 'react'
import './App.css'

function App(){
    return(
        <span className="red-span">再组件内直接使用</span>
    )
}
export default App
  • 这种方式的优点在于组件代码省去css部分,变得清晰
  • 缺点是这样定义的样式是全局样式,会产生样式冲突

2.3 组件中引入.module.css

  • 这种方式跟上述方式有点类似,都是在组件内引入一个css文件,不同点在于这种方式引入的是一个module,他只对当前组件生效,不会产生全局污染
  • 这种方式是webpack的特工方案,需要配置webpack的modules:true
  • 新建App.module.css
  .redspan{
    color:red
  }
import React from 'react'
import styles from './App.module.css'

function App(){
    return(
        <span className={styles.redspan}>再组件内直接使用</span>
    )
}
export default App
  • 这种方式的优点在于局部生效
  • 但缺点是不能通过xx-xx命名类名,
  • 而且绑定样式的时候需要通过{style.xxx}来绑定,书写比较麻烦
  • 也不方便根据state动态设置

2.4 CSS in JS

  • 一句话,就是把CSS写在JS里面,并将样式与组件逻辑相结合
  • 我们会用第三方库,比如styled-components
npm install styled-components
  • 至于知否单独封装一个js,完全看实际情况,可以单独抽离一个js文件,也可以直接写在组件里面,这里用抽离方式来写
  • 新建一个style.js
import styled from 'styled-components'
const MySpan=style.span`
    color:red
`
export default MySpan
import React from 'react'
import MySpan from './style.js'

function App(){
    return(
        <MySpan >Css in Js</MySpan>
    )
}
export default App
  • 这种方式的优点是显而易见的,样式与组件紧密结合,提高了组件的可重用性,同时支持根据组件的props传递动态样式,灵活性高
  • 缺点在于在运行时生成样式,可能会带来一定性能开销,但是交互很小

3. 总结

  • 在一般的开发中,CSS in JS这种方式可以满足大部分的场景,其他方式可以在实际项目中结合着使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

许先森森

爱我就打我

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值