效果图如下

直接上代码

目录如下,Button和Text是自己封装的Button组件和Input组件

Button/index.js

import react, {Component} from "react";
import '../../index.css'class Button extends Component {render() {return <input type='button' value={this.props.value} className={this.props.className ? this.props.className : 'button_type'}></input>}
}export default Button

Text/index.js

import react, {Component} from "react";
import '../../index.css'class Text extends Component {render() {return <input className="text_type" type='text' value={this.props.value} readOnly={true}></input>}
}export default Text

Counter/index.js

import React, { Component } from "react"
import Button from './components/Button'
import Text from "./components/Text"
import './index.css'class Counter extends Component {constructor() {super()this.state = {text: ''}}onClickButton=(e) => {if(e.target.value) {let currentValue = e.target.valuelet prvcontent = this.state.textlet content = ''switch (e.target.value) {case '+':case '-':case '*':case '/':let arr1 = prvcontent.split(' ')if(arr1.length > 1) {if(arr1[arr1.length -1] === '') {arr1.pop()arr1.pop()prvcontent = arr1.join(' ')} else if(arr1.length === 3) {switch (arr1[1]) {case '+':prvcontent = parseFloat(arr1[0]) + parseFloat(arr1[2])break;case '-':prvcontent = parseFloat(arr1[0]) - parseFloat(arr1[2])break;case '*':prvcontent = parseFloat(arr1[0]) * parseFloat(arr1[2])break;case '/':if(arr1[2] === 0) {prvcontent = '除数不能为零'} else {prvcontent = parseFloat(arr1[0]) / parseFloat(arr1[2])}break;default:break;}}}content = prvcontent + ' ' + currentValue + ' 'break;case 'C':content = ''break;case 'Back':if(prvcontent.length === 1) {prvcontent = ''} else {if(prvcontent[prvcontent.length - 1] === ' ' && prvcontent[prvcontent.length - 3] === ' ') {prvcontent = prvcontent.slice(0, prvcontent[prvcontent.length - 3])} else {prvcontent = prvcontent.slice(0, prvcontent[prvcontent.length - 1])}}content = prvcontentbreak;case '=':let arr2 = prvcontent.split(' ')if(arr2.length > 1) {if(arr2[0] && arr2[2]) {switch (arr2[1]) {case '+':content = parseFloat(arr2[0]) + parseFloat(arr2[2])break;case '-':content = parseFloat(arr2[0]) - parseFloat(arr2[2])break;case '*':content = parseFloat(arr2[0]) * parseFloat(arr2[2])break;case '/':if(arr2[2] === 0) {content = '除数不能为零'} else {content = parseFloat(arr2[0]) / parseFloat(arr2[2])}break;default:break;}} else if(arr2[0] && !arr2[2]) {switch (arr2[1]) {case '+':content = parseFloat(arr2[0]) + parseFloat(arr2[0])break;case '-':content = parseFloat(arr2[0]) - parseFloat(arr2[0])break;case '*':content = parseFloat(arr2[0]) * parseFloat(arr2[0])break;case '/':if(arr2[0] === 0) {content = '结果未定义'} else {content = parseFloat(arr2[0]) / parseFloat(arr2[0])}break;default:break;}} else if(!arr2[0] && arr2[2]) {switch (arr2[1]) {case '+':content = 0 + parseFloat(arr2[2])break;case '-':content = 0 - parseFloat(arr2[2])break;case '*':case '/':content = 0break;default:break;}}} else if(arr2.length === 1) {if(arr2[0]) {if(arr2[0] === '.') {content = 0} else {content = arr2[0]}}}break;default:content = prvcontent + currentValuebreak;}this.setState({text: content})}}render() {return (<div><div><Text value={this.state.text}></Text></div><div onClick={this.onClickButton} className="button_div"><div><Button value={1}></Button><Button value={2}></Button><Button value={3}></Button><Button value={'Back'} className={"other_button"}></Button></div><div><Button value={4}></Button><Button value={5}></Button><Button value={6}></Button><Button value={'+'}></Button><Button value={'-'}></Button></div><div><Button value={7}></Button><Button value={8}></Button><Button value={9}></Button><Button value={'*'}></Button><Button value={'/'}></Button></div><div><Button value={'C'}></Button><Button value={0}></Button><Button value={'.'}></Button><Button value={'='} className={"other_button"}></Button></div></div></div>)}
}export default Counter

Counter/index.css

.button_type {width: 30px;flex: auto;margin: 2px;
}
.other_button {width: 64px;flex: auto;margin: 2px;
}
.text_type {width: 158px;margin: 2px;
}
.button_div {width: 200px;
}

本文结构参考了@风吹行舟的《使用React实现一个简单计算器》,计算逻辑是自己写的,如有不足,欢迎指出。

用js/react写一个计算器相关推荐

  1. input点击事件不能用_用js简单写一个计算器

    嗨,大家好,今天给大家带来的是一个计算器 首先要知道我们常用的计算器都有哪些按键,有'0~9','+' ,' -' , '*', '/',还有'=' 和'.',基本是这些按键,然后我们去创建一些按键. ...

  2. vue手写一个计算器

    计算器大家都不陌生 有计算器机器 有手机计算器 网页计算器! 那么好 今天我来给大家手写一个计算器 啥都不说上操作 请听题:vue手写计算器 一个个小方块拼成一个计算器 绿色比较好 可以缓解视力哦 i ...

  3. [react] 写一个react的高阶组件并说明你对高阶组件的理解

    [react] 写一个react的高阶组件并说明你对高阶组件的理解 定义高阶组件 import React, { Component } from 'react';const simpleHoc = ...

  4. [react] 使用react写一个todo应用,说说你的思路

    [react] 使用react写一个todo应用,说说你的思路 拆分组件:应用 + 表单部分(input + button).列表部分(checkbox + ul>li + delete but ...

  5. [js] 手写一个trim()的方法

    [js] 手写一个trim()的方法 function trim(str) { if (str[0] === ' ' && str[str.length - 1] === ' ') { ...

  6. [js] 请写一个性能最好的深度克隆对象的方法

    [js] 请写一个性能最好的深度克隆对象的方法 const deepClone = (obj) => {const copy = obj instance Array ? [] : {};for ...

  7. python 写一个计算器_Python | 写个计算器吧

    今天咱们用python来写一个计算器,计算一组数的最大公约数和最小公倍数吧. 注:本文使用python3 01 死循环 下面给出一段看似正确的代码,这段代码的作用是给出n1,n2的最小公倍数. 你可以 ...

  8. 写一个计算器(C语言版本),可以求出:整数的加,减,乘,除四则运算

    写一个计算器(C语言版本),可以求出:整数的加,减,乘,除四则运算! 对于求出整数的加减乘除问题,我想大家现如今看见笔者此篇博文时候!大多都已经能够正确写出准确的代码来求整数的加减乘除了!其实对于计算 ...

  9. 用js来写一个478呼吸动画来做393的默想吧-用js来写一个478呼吸动画

    title: 用js来写一个478呼吸动画来做393的默想吧 date: 2023-02-12 09:37:34.01 updated: 2023-02-23 17:38:15.804 url: ht ...

最新文章

  1. 暑期集训3:几何基础 练习题H: POJ - 2456
  2. linux ubunt 安装软件的前期准备——更新源的更换
  3. flutter实现(OutlineButton)线框按钮
  4. oracle删除表中数据_Excel工作表中,删除重复数据的2种方法解读,高效且实用!...
  5. Linux 中的远程登陆
  6. java 实现支持向量机
  7. 尚学堂java培训_IT培训教育平台课程分享
  8. RTT线程管理篇——RTT时间片
  9. java 蓝桥杯算法训练 P1102
  10. spring的历史与设计哲学
  11. CLion IDE 来调试 JVM 源码
  12. 51单片机视频教程下载
  13. ConcurrentHashMap的使用场景
  14. 图表数据分析怎么做,举实例给你说清楚
  15. 在上海创业的日子之寻找办公室
  16. QT之SQLITE3数据库
  17. 项目管理:项目开发类型、模型、流程以及案例介绍
  18. 边缘计算七大核心技术
  19. 机器学习自然语言处理之英文NLTK(代码+原理)
  20. python rpa机器人_6个开源工具机器人过程自动化RPA工具

热门文章

  1. ADIDAS阿里纳斯励志广告语
  2. 轻量级Rpc框架设计--motan源码解析六:client端服务发现
  3. java compareTo 方法 和 Comparator 接口
  4. 宝哥软件测试面试三十六计出炉
  5. 中金所技术公司-入职金融IT国企之路
  6. 地狱修炼之路—Python远控领域!
  7. C语言小游戏:飞翔的小鸟(完整版)
  8. 苹果cms10好看的模板高权重收录好的高端免费模板
  9. html实现经典捕鱼达人小游戏
  10. python安装bs4几种方法_python3如何安装bs4