初学react,于是做了一个计算器练练手。有不足的地方欢迎大家评论指出来,后续进行修改。

涉及知识点:

  1. 页面布局通过网格布局实现
  2. css宽度计算函数calc()
  3. React获取DOM元素的文本内容通过e.target.innerText来实现
  4. 通过eval()函数进行求值

效果图:

​​​​​​​

具体代码实现:

文件结构:

App.js:

import List from "./List/List";
function App() {return (<div><List /></div>);
}
export default App;

逻辑代码处理:

import React from 'react'
import "./List.css"
class List extends React.Component {constructor() {super();this.state = {text: '', // 显示的结果值status: 0, // 判断用户是否已经进行求值  0: 是, 1: 否value: "",}}// 输入值change = (e) => {// e.target.innerHTML  获取按钮的值var val = ''; // 定义一个变量进行更新值 if (this.state.status == 0) {if (this.state.text == '0') { // 判断第一次是否是0if (e.target.innerHTML == '+' || e.target.innerHTML == '-' || e.target.innerHTML == '*' || e.target.innerHTML == '/' || e.target.innerHTML == '.') {val = this.state.text + e.target.innerHTML} else {val = e.target.innerHTML;}} else if (this.state.text == '') {if (e.target.innerHTML == '+' || e.target.innerHTML == '*' || e.target.innerHTML == '/') {val = '';} else {val = e.target.innerHTML;}} else {var arr = this.state.text.split('')if (arr.length > 0) { // 获取显示的值最右一位var text = arr[this.state.text.split('').length - 1]}if (text == '+' || text == '-' || text == '*' || text == '/' || text == '.') { // 判断最后一位是否是 ' + '  ' — ' ' * '  ' / 'if (e.target.innerHTML != '+' && e.target.innerHTML != '-' && e.target.innerHTML != '*' && e.target.innerHTML != '/') { // 判断用户再次输入的是否是数字val = this.state.text + e.target.innerHTML} else { // 不是则删除之前的运算符val = this.state.text.substring(0, this.state.text.length - 1) + e.target.innerHTML}} else {val = this.state.text + e.target.innerHTML}}} else {if (e.target.innerHTML == '+' || e.target.innerHTML == '-' || e.target.innerHTML == '*' || e.target.innerHTML == '/') { // 等于后在该值上进行运算,则不覆盖原有的值val = this.state.text + e.target.innerHTML} else { // 对等于后的值不进行计算,则进行覆盖val = e.target.innerHTML;}}var valueText = ''; // 处理实时计算的变量if (val != '') {if (val == '.') {valueText = ''} else {var lastArrs = val.split('')if (lastArrs.length > 0) { // 获取显示的值最右一位var lastTexts = lastArrs[val.split('').length - 1]}if (lastTexts == '+' || lastTexts == '-' || lastTexts == '*' || lastTexts == '/') {valueText = eval(val.substring(0, val.length - 1))} else {valueText = eval(val)}}}this.setState({text: val,status: 0,value: valueText})}// 求值equal = () => {if (this.state.text == '') { } else {var equalArr = this.state.text.split('')var equalText = equalArr[this.state.text.split('').length - 1]if (equalText == '+' || equalText == '-' || equalText == '*' || equalText == '/') {this.state.text = this.state.text.substring(0, this.state.text.length - 1)}this.setState({text: eval(this.state.text),status: 1,value: ''})}}// 清除输入框的值clear = () => {this.setState({text: "", // 用户输入的值status: 0,value: ''})}// 删除最后一位del = () => {if (this.state.text != '') {if (typeof this.state.text === 'number') { // 计算结果后值为数字类型  强制转成字符串类型this.state.text = this.state.text.toString()}this.setState({text: this.state.text.substring(0, this.state.text.length - 1),status: 0})}}render() {return (<div><div className=''><div className='content'>{/* 显示区域 */}<div className='show-num'><input type="text" value={this.state.text} disabled/><input type="text" value={this.state.value} disabled /></div>{/* 键盘区 */}<div className='btn-cont'><div className='number1'><button className='equal' onClick={this.clear}>C</button><button onClick={this.change}>/</button><button onClick={this.change}>*</button></div><div className='number'><button onClick={this.change}>7</button><button onClick={this.change}>8</button><button onClick={this.change}>9</button><button onClick={this.del}>del</button></div><div className='number'><button onClick={this.change}>4</button><button onClick={this.change}>5</button><button onClick={this.change}>6</button><button onClick={this.change}>-</button></div><div className="number"><button onClick={this.change}>1</button><button onClick={this.change}>2</button><button onClick={this.change}>3</button><button onClick={this.change}>+</button></div><div className="number4"><button onClick={this.change}>0</button><button onClick={this.change}>.</button><button className='equal' onClick={this.equal}>=</button></div></div></div></div></div >)}
}
export default List;

List.css样式:

*{margin: 0;padding: 0;
}
.content{width: 300px;background-color: blanchedalmond;border: 1px solid blanchedalmond;border-radius: 10px;margin: 0 auto;padding: 10px;margin-top: 10vh;
}
.show-num{margin-bottom: 10px;
}
.show-num input{width: calc(100% - 10px);height: 70px;outline:none;border:none;background-color: #fff;text-align: right;padding-right: 10px;font-size: 36px;
}
.show-num input:last-child{height: 50px;font-size: 20px;
}
.btn-cont .number{display: grid;grid-template-columns: repeat(4,1fr);grid-gap: 10px;margin-bottom: 10px;place-items: center;
}
.number:last-child{margin-bottom: 0;
}
.number1{display: grid;grid-gap: 10px;place-items: center;grid-template-columns: 2fr repeat(2,1fr);margin-bottom: 10px;
}
.number4{display: grid;grid-gap: 10px;place-items: center;grid-template-columns: repeat(2,1fr) 2fr;
}.btn-cont button{border-radius: 50%;width: 50px;height: 50px;border: 1px solid #999;background-color: #fff;cursor: pointer;text-align: center;line-height: 50px;font-size: 20px;
}
.number1 button:first-child ,.number4 button:last-child{width: 100%;height: 100%;border-radius: 50px;font-size: 24px;
}
.btn-cont button:active{box-shadow: 0 0 1px 1px rgba(0,0,0,.3);
}

react实现一个简单的计算器相关推荐

  1. 使用React实现一个简单计算器

    使用React实现一个简单的计算器代码 实现效果: index.html <!DOCTYPE html> <html lang="en"><head& ...

  2. android实现计算器功能吗,利用Android实现一个简单的计算器功能

    利用Android实现一个简单的计算器功能 发布时间:2020-11-20 16:25:01 来源:亿速云 阅读:90 作者:Leah 今天就跟大家聊聊有关利用Android实现一个简单的计算器功能, ...

  3. python123程序设计题说句心里话_用c++写一个简单的计算器程序

    // 050305.cpp : 定义控制台应用程序的入口点. // // 050304.cpp : 定义控制台应用程序的入口点. // //四则运算 #include "stdafx.h&q ...

  4. linux qt小型计算器,Qt实现一个简单的计算器

    Qt实现一个简单的计算器 作者:hackett 微信公众号:加班猿 一.UI界面版 运行效果:输入num1和num2选择+-*/点击计算即可 UI界面设计: 3个lineEdit(lineEditNu ...

  5. vue设置一个简单的计算器

    vue设置一个简单的计算器 <div id="app"><input type="text" v-model="n1"&g ...

  6. Windows10 手机应用程序开发 - 3. 做一个简单的计算器界面

    2019独角兽企业重金招聘Python工程师标准>>> 目标:完成一个简单的计算器的界面,暂时不做点击处理,主要联系UI布局. 步骤: 1.创建一个空的windows phone 项 ...

  7. 正则表达式应用:实现一个简单的计算器

    实现一个简单的计算器,代码如下: 下面的函数用来检验数学表达式的合规性,当然此处只实现两个检验:(1)括号应该闭合 (2)不能出现字母 def check_expression(str):check_ ...

  8. python计算器教程,用Python程序制作一个简单的计算器

    用Python程序制作一个简单的计算器 在此示例中,您将学习创建一个简单的计算器,该计算器可以根据用户的输入进行加,减,乘或除. 要理解此示例,您应该了解以下Python编程主题: 通过函数创建简单计 ...

  9. JS实现一个简单的计算器

    使用JS完成一个简单的计算器功能.实现2个输入框中输入整数后,点击第三个输入框能给出2个整数的加减乘除.效果如上: 第一步: 创建构建运算函数count(). 第二步: 获取两个输入框中的值和获取选择 ...

最新文章

  1. 230套java web开发PDF书籍和CHM参考手册资料大全 免费下载
  2. lombok 不用再写pojo的getset
  3. mysql 密码忘记了怎么办? [仅msyql8版本]
  4. nginx伪装user-agent等
  5. 设计包含min()函数的栈
  6. 计算机网络之物理层:7、物理层设备(中继器、集线器)
  7. 微服务升级_SpringCloud Alibaba工作笔记0022---Nacos之Group分组方案
  8. [转载] python数字类型(一)
  9. poj2991 Crane
  10. knot DNS 01 Tips
  11. Redis入门(适合新手)
  12. Fragstats4.2.1入门心得
  13. Windows10系统把JDK安装到D盘上的步骤及安装
  14. 新基建深度报告:七大领域十大龙头分析
  15. 嗅探(窃听网络上流经的数据包)
  16. ARM 之 STM32F407zgt6 外设篇 ----------- FLASH 存储部分数据
  17. 原子物理与原子核物理知识结构(含链接)
  18. 编译x86 release版本libcurl,支持https
  19. 时光倒流:业务支撑那些事(四)
  20. PMBOK(第五版)学习笔记 —— ITTO(输入、工具与技术及输出)汇总

热门文章

  1. windows更换壁纸脚本
  2. 计算机向用户传递计算 处理结果的设备,计算机向用户传递计算、处理结果的设备是()...
  3. Lua + Redis 优惠券领券设计
  4. win32学习之路(六)
  5. Zookeeper(超级无敌认真好用,万字收藏篇!!!!)
  6. 微信高可用分布式数据库PhxSQL设计与实现
  7. windows 10 关键错误,“开始”菜单无法使用,Cortana无法使用 无法工作的两种解决方法,实测可行
  8. Java迭代器(Iterator)的用法
  9. 职场人必用的MindManager免费思维导图软件使用教程。
  10. zsy后台管理系统-架构设计