效果
- npx create-react-app用脚手架创建一个react项目
- 在src下创建components/count.jsx
- 在App.js引入
import logo from './logo.svg';
import './App.css';
import Count from './components/count'
function App() {
return (
<div className="App">
<Count />
</div>
);
}
export default App;
- 在count.jsx写逻辑
import React, { Component } from 'react'
export default class Count extends Component {
state = {
count: 0
}
increase = (select) => {
// 得到选择的值
let number = this.select.value * 1
// 得到原本的count值,计算新count
let count = this.state.count
// 更新状态
this.setState({ count: count + number })
}
decrease = () => {
// 得到选择的值
let number = this.select.value * 1
// 得到原本的count值,计算新count
let count = this.state.count
// 更新状态
this.setState({ count: count - number })
}
increaseOdd = () => {
// 得到选择的值
let number = this.select.value * 1
// 得到原本的count值,计算新count
let count = this.state.count
// 符合条件更新状态
if (count % 2) {
this.setState({ count: count + number })
}
}
increaseSync = () => {
// 异步更新状态
setTimeout(() => {
// 得到选择的值
let number = this.select.value * 1
// 得到原本的count值,计算新count
let count = this.state.count
this.setState({ count: count + number })
}, 1000)
}
render() {
let count = this.state.count
return (
<div>
<p>click {count} times</p>
<div>
<select ref={select => this.select = select}>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<button onClick={this.increase}>+</button>
<button onClick={this.decrease}>-</button>
{/* Odd奇数 */}
<button onClick={this.increaseOdd}>odd</button>
<button onClick={this.increaseSync}>sync</button>
</div>
</div>
)
}
}
参考自:https://www.bilibili.com/video/BV1oW41157DY?p=38
视频内的异步更新会出现问题,本文中代码做了修改