react四种组件中DOM样式设置方式详解
作者:久宇诗
1、行内样式
想给虚拟dom添加行内样式,需要使用表达式传入样式对象的方式来实现
行内样式需要写入一个样式对象,而这个样式对象的位置可以放在很多地方
例如:render
函数里、组件原型上、外链js文件中
注意:这里的两个括号,第一个表示我们在要JSX里插入JS了,第二个是对象的括号
<p style={{color:'red', fontSize:'14px'}}>Hello world</p>
2、使用class
React推荐我们使用行内样式,因为React觉得每一个组件都是一个独立的整体
其实我们大多数情况下还是大量的在为元素添加类名,但是需要注意的是,class
需要写成className
(因为毕竟是在写类js代码,会收到js规则的现在,而class
是关键字)
import React, { Component } from 'react' 1. 外部引入定义的样式 import styles from './style.css' class ClassStyle extends Component { render() { // js逻辑 let className = cx({ font: false }) return ( <> <div className={className}>hello</div> <p className='setstyle'>样式</p> <DivContainer> world </DivContainer> <> ) } } export default ClassStyle
3、classNames不同的条件添加不同的样式
有时候需要根据不同的条件添加不同的样式,比如:完成状态,完成是绿色,未完成是红色。那么这种情况下,我们推荐使用classnames这个包:
目的:
由于react原生动态添加多个className会报错
import style from './style.css' <div className={style.class1 style.class2}</div>
想要得到最终渲染的效果是:
<div class='class1 class2'></div>
下载安装
npm i -S classnames
使用
import classnames from 'classnames' <div className=classnames({ 'class1': true, 'class2': true )> </div>
4、css-in-js
styled-components
是针对React写的一套css-in-js框架,简单来讲就是在js中写css。npm链接
- 传统的前端方案推崇"关注点分离"原则,HTML、CSS、JavaScript 应该各司其职,进行分离。
- 而在react项目中,更提倡组件化方案,自然形成了将HTML、CSS、JavaScript集中编写管理的方式。
styled-components 应该是CSS-in-JS最热门的一个库,通过styled-components,你可以使用ES6的标签模板字符串语法,为需要styled的Component定义一系列CSS属性,当该组件的JS代码被解析执行的时候,styled-components会动态生成一个CSS选择器,并把对应的CSS样式通过style标签的形式插入到head标签里面。动态生成的CSS选择器会有一小段哈希值来保证全局唯一性来避免样式发生冲突。
1.安装
npm i -S styled-components
定义样式
2.样式js文件
import styled from 'styled-components' const Title = styled.div` color:red; font-size:16px; h3{ color:blue; font-size:20px; } ` export { Title }
显示
就像使用常规 React 组件一样使用 Title
import React, { Component } from 'react' import { Title } from './Styles' class App extends Component { render() { return ( <div> <Title> 我只是一个标题 <h3>你好世界</h3> </Title> </div > ); } } export default App
3.样式继承
样式
import styled from 'styled-components' const Button = styled.button` font-size: 20px; border: 1px solid red; border-radius: 3px; `; // 一个继承 Button 的新组件, 重载了一部分样式 const Button2 = styled(Button)` color: blue; border-color: yellow; `; export { Button, Button2 }
显示
import React, { Component } from 'react' import { Button, Button2 } from './Styles' class App extends Component { render() { return ( <div> <Button>我是一个按钮1</Button> <Button2>我是一个按钮2</Button2> </div > ); } } export default App
4.属性传递
样式
import styled from 'styled-components' const Input = styled.input` color: ${props => props.inputColor || "blue"}; border-radius: 3px; `; export { Input }
显示
import React, { Component } from 'react' import { Input } from './Styles' class App extends Component { render() { return ( <div> <Input defaultValue="你好" inputColor="red"></Input> </div > ); } } export default App
到此这篇关于react之四种组件中DOM样式设置方式的文章就介绍到这了,更多相关react组件DOM样式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!