您现在的位置是:首页 >技术杂谈 >【react】react18的学习(五)--样式私有化网站首页技术杂谈
【react】react18的学习(五)--样式私有化
简介【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>
)
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。