【react】react18的学习(五)--样式私有化

上一篇:【react】react18的学习(四)–复合组件通信

vue中scoped,react中没有;

  • 方式一:【个别样式可用】行内样式style,不利于复用维护;

  • 方式二:【公共样式常用】人为约定,每个组件类名不重复即可,如外层以组件名为前缀:.nav-*{}

  • 方式三:【公共样式可用,原生css写法】CSS Modules:1、以Nav.module.css为样式文件;2、使用import sty from './Nav.module.css',这个对象是键值对,以css中类名为键,以生成的唯一值为值;3、使用className={sty.box}

// 以Nav.modules.css为样式文件
.box{}
.box2{composes: box;} //组合,相当于使用box2,自动加了box
:global(.demo) {}// 不参与处理,最终还是.demo
// 导入
import sty from './Demo.module.css'
sty={box:'Nav_box_c6EW3'} //生成唯一值,做类名
className={sty.box}
  • 方式四:【常用于hooks组件】基于css-in-js思想,安装react-jss
    • css modules相同之处:返回对象键值对;
    • 不同之处:前者是css写法,后者是js写法,支持传参;
    • 默认只能在hooks组件;也可使用代理组件、高阶组件作用于类组件;
import { createUseStyles } from 'react-jss'
// props为调用者传入的参数
const useStyles = createUseStyles({
  box: props => {
    return {
      color: props.color,
      '& a': {
        color: props.color,
      },
    }
  },
})
// 使用
const Demo = () => {
  // box:'box-0-2-1 box-d0-0-2-2',用于类组件会报错
  let { box } = useStyles({
    color: 'black',
  })
  return (
    <div className={box}>
      <div>测试显示</div>
    </div>
  )
}
  • 补充:高阶组件HOC

闭包思想:使用函数执行返回函数组件,函数组件内部嵌套当前组件;可用于动态组件、类组件使用hooks;

// 父组件
<Demo title='hoc组件'></Demo>
// 子组件
import React, { Component } from 'react'

class Demo extends Component {
  render() {
    let { title } = this.props
    return ()
  }
}
const ProxyCom = function (Component) {
  return function HOC(props) {
    return <Component {...props}></Component>
  }
}
export default ProxyCom(Demo)
  • 方式五:【公共样式常用】基于css-in-js思想,安装styled-components
    • react-jss相同之处:思想相同,都是js写法,支持传参;
    • 不同之处:返回的是react组件,该组件自带一个hash的类名;与方式二类似,给外层唯一值类名;
// 写样式组件
import styled from 'styled-components'

export const Box = styled.div`
  font-size: 20px;
  span {
    color: ${props=>props.color};
  }
`
// 使用
import { Box } from './Box'

return (
  <Box color='red'>
    <div>{title}</div>
    <span>hello</span>
  </Box>
)

下一篇:react18的学习(六)–redux补充

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值