手把手的react计算器小案例

效果
在这里插入图片描述

  1. npx create-react-app用脚手架创建一个react项目
  2. 在src下创建components/count.jsx
    在这里插入图片描述
  3. 在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;
  1. 在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>&nbsp;
                    <button onClick={this.increase}>+</button>&nbsp;
                    <button onClick={this.decrease}>-</button>&nbsp;
                    {/* Odd奇数 */}
                    <button onClick={this.increaseOdd}>odd</button>&nbsp;
                    <button onClick={this.increaseSync}>sync</button>&nbsp;
                </div>
            </div>
        )
    }
}

参考自:https://www.bilibili.com/video/BV1oW41157DY?p=38
视频内的异步更新会出现问题,本文中代码做了修改

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值