样式使用
标签属性style 行内样式
属性class 链接外部样式
src\assets\App1.css
.danger{
background-color: red;
color:white;
border-radius: 10px;
}
.success{
background-color: green;
color:white;
border-radius: 10px;
}
.warn{
background-color: yellow;
color:white;
border-radius: 10px;
}
App.js
// rcc
/**
* style 行内样式
* class 样式 存储到外部文件
* 需要导入使用
*
*/
import React, { Component } from "react";
// 导入文件需要注意路径
import "./assets/App1.css";
export default class App extends Component {
size = 18;
// 练习:写一个按钮点击之后字体变大
// 分析:1.编写一个按钮并绑定点击事件
// 2.事件处理方法里 对size属性+1
// 3.刷新DOM
sizeChange() {
this.size++;
console.log(this.size);
// 刷新DOM渲染页面
this.setState({});
}
render() {
return (
<div>
{/* JS描述样式的方式 */}
<div style={{ color: "red", fontSize: this.size }}>Hello React</div>
<button onClick={this.sizeChange.bind(this)}>字体变大</button>
<div className="danger">WEB2108</div>
{/* 动态改变绑定的样式class 根据size变量 */}
{/* <22 success 否则就是danger */}
<div className={this.size < 22 ? "success" : "danger"}>WEB2108</div>
{/* <22 sucess; 22-25 warn; >25 danger */}
{/* 如果在属性中写JS代码比较多时,建议封装为方法调用即可 */}
{/* 只有事件触发的方法 调用不加() */}
<div className={this.showClass()}>WEB2108</div>
</div>
);
}
showClass() {
// <22 sucess; 22-25 warn; >25 danger
if (this.size < 22) return "success";
if (this.size > 25) return "danger";
return "warn";
}
}
图片
// rcc
/**
* 远程图片
* 本地图片
*/
import React, { Component } from "react";
import mypng from "./assets/1.png";
export default class App extends Component {
render() {
return (
<div>
{/* 远程图片 直接填写地址即可 */}
<img
src="https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png"
width="200"
/>
{/* 本地图片 习惯上把资源文件放在/src/assets目录 */}
{/* 方法一 使用require语法*/}
<img src={require("./assets/1.png")} />
{/* 方法二 import mypng是上面引入的别名变量名称 */}
<img src={mypng}/>
</div>
);
}
}
条件渲染
import React, { Component } from "react";
export default class App extends Component {
score = 60;
// delta 是表示变量
changeScore(delta) {
// 修改分数
// this.score = this.score+delta;
this.score += delta;
// 刷新DOM
this.setState({});
}
render() {
return (
<div>
<h4>当前分数为:{this.score}</h4>
<button
onClick={this.changeScore.bind(this, -10)}
disabled={this.score <= 0}
>
-10分
</button>
<button
onClick={this.changeScore.bind(this, 10)}
disabled={this.score >= 100}
>
+10分
</button>
{/* 如果分数大于等于60 则显示及格了 否则显示不及格 */}
{this.show()}
</div>
);
}
show() {
if (this.score >= 60) {
// 返回JSX语法 不要加引号 加了引号返回的是字符串
return <div style={{ color: "green" }}>及格</div>;
} else {
return <div style={{ color: "red" }}>不及格</div>;
}
}
}
双向绑定
在表单元素中
单向数据流:数据渲染到页面DOM上
双向数据流:既满足单向数据流,又可以接收到用户输入的信息。
数据<=>页面
vue 双向绑定
v-model本质是v-bind v-on结合的语法糖
import React, { Component } from 'react'
export default class App extends Component {
state = {name:'皮卡丘'}
_nameChange(e){
// e.target.value 文本输入的值
console.log(e.target.value);
let name = e.target.value
this.setState({name})
}
render() {
// es6结构语法 后续调用更为方便一些
const {name} = this.state
return (
<div>
<div>输入的内容:{name}</div>
<input type="text" value={name} onChange={this._nameChange.bind(this)} />
</div>
)
}
}