React 使用 JSX 来替代常规的 JavaScript。
有关JSX的资料请参考:
https://baike.baidu.com/item/JSX/1686693?fr=aladdin
https://react.docschina.org/docs/introducing-jsx.html
React中样式的使用方式有以下几种:
import React, { Component } from 'react';
import "./common.css";
class Box extends Component {
constructor(){
super();
this.state ={
styleObj:{
fontSize:'50px'
}
}
}
render() {
return (
// 使用class,container是在common.css中声明的一个样式
<div className="container">
{/* 行内样式 */}
<h1 style={{'fontSize':'20px'}}>标题1</h1>
<h1 style={this.state.styleObj}>标题2</h1>
</div>
);
}
}
export default Box;
新建后缀名为.module.css的样式文件,例如新建common.module.css的样式文件内容如下:
.success{color:green;font-size:20px;}
.error{color:red;font-size:20px;}
使用的时候,通过 import 导入样式文件,通过文件名[属性]
来使用这个样式。
import React, { Component } from 'react';
import common from "./common.module.css"
class Box extends Component {
render() {
return (
<div>
<span className={common.error}>异常信息</span>
</div>
);
}
}
export default Box;
通过 classNames 插件来完成,根据不同的条件判断,应用不同的样式。
在终端执行下面的命令,安装 classNames
yarn add classnames -S
使用的时候:
1、通过 import 先导入classNames 插件;
2、使用 classNames.bind() 方法建立绑定关系;
3、声明样式对象,属性名为样式名称,值为boolean,true表示应该该样式;false表示不应用该样式;
4、在标签上添加 className 属性,值为该样式对象;
具体使用方式如下:
/* common.css 文件内容 */
.success{color:green;font-size:20px;}
.error{color:red;font-size:20px;}
react 代码:
import React, { Component } from 'react';
import ReactDOM from 'react-dom';
import classNames from 'classnames/bind';
import styles from './common.css'
let cx = classNames.bind(styles); //建立绑定关系
class Box extends Component {
render() {
let names = cx({ //声明样式对象
success:true,
error:this.props.error //从标签属性中读取传过来的值
})
return (
<div>
<h1 className={names}>这是提示信息</h1>
</div>
);
}
}
ReactDOM.render(
<Box error={false} />,
document.getElementById('root')
);
使用这种方式的好处就是可以动态切换DOM元素中应用的样式。
在 react 里一切皆组件,所以能不能把 clss 也定义成组件模块呢?当然是可以的。styled-components
是针对 React 写的一套 css-in-js 框架,简单来讲就是可以在 js 中写 css。
“CSS-in-JS” 是指一种模式,其中 CSS 由 JavaScript 生成而不是在外部文件中定义。
注意此功能并不是 React 的一部分,而是由第三方库提供。 React 对样式如何定义并没有明确态度;如果存在疑惑,比较好的方式是和平时一样,在一个单独的 *.css 文件定义你的样式,并且通过 className 指定它们。
我们来看如何使用 styled-components 插件。
在终端中执行下面的命令,安装 styled-components 插件
yarn add styled-components -S
新建一个样式文件,注意这个样式文件的后缀是 .js
1、通过 import 导入 styled-components;
2、使用 styled 定义样式内容,可以通过属性传参,也可以使用 sass 语法;
//common.js 样式文件
import styled from 'styled-components'
//这种定义的写法类似于
const Container = styled.div`
width:500px;
height:500px;
background:${(props)=>props.color};
font-size:30px;
h1 {
font-size:50px;
}
`
export {
Container
}
在react中使用的时候:
import React, { Component } from 'react';
import {Container} from './common'
class Box extends Component {
render() {
return (
<Container color="red">
<h1> hello world</h1>
这里是内容
</Container>
);
}
}
ReactDOM.render(
<Box />,
document.getElementById('root')
);
最终渲染到页面的结果如下:
这种方式的优点是可以动态传递参数。