react实现简单的计算器功能。

2023-11-07

简单的计算器功能。

最近在学react,发现对react的掌握不是很熟练,于是就动手自己做了一个react计算器(因为计算器是最能理解生命周期的),话不多说,直接进入主题。

难点:

  1. 对于获取数字
    React 获取 DOM 元素节点的文本内容
    用e.target.innerText来实现。
  2. 运算字符串里面的数学公式 用 eval 函数

后面基本上就是一些简单的逻辑与生命周期。

效果图

在这里插入图片描述

具体代码实现:

代码逻辑结构:
在这里插入图片描述
具体实现:

//calculator.js
import React, { Component } from "react";
import '../../demo.css';

export default class Calculator extends Component {
    constructor(props) {
        super(props)
        this.state = {
            text: ""//实时更新用户输入的值
        }
        this.change = this.change.bind(this)
        this.cal = this.cal.bind(this)
        this.cl = this.cl.bind(this)
        this.del = this.del.bind(this)
    }
    //改变方法,主要用来计算
    change =(e)=> this.setState({text:this.state.text + e.target.innerText})

    //进行计算(调用数学方式)
    cal=()=> this.setState({text: eval(this.state.text)})

    //删除最后一位
    del=()=>this.setState({text:this.state.text.substring(0,this.state.text.length-1)})

    //清除
    cl=()=> this.setState({text:""})


    render() {
        return(
            <div className="form">
                <div >
                    <div className="head">
                        {/*========输入框======*/}
                        <input type="text" id="ipt" className="ipt" value= {this.state.text}  />

                    </div>
                    <div>
                        <div className="number1">
                            {/*第一列键盘*/}
                            <button style={{height:"35px",width:"30px"}} onClick={this.cal}>=</button>
                            <button style={{height:"35px",width:"30px"}} onClick={this.cl}>C</button>
                            <button style={{height:"35px",width:"30px"}} onClick={this.change}>%</button>
                            <button style={{height:"35px",width:"30px"}} onClick={this.change}>/</button>
                        </div>
                        <div  className="number2" >
                            {/*第二列键盘*/}
                            <button style={{height:"35px",width:"30px"}} onClick={this.change}>1</button>
                            <button style={{height:"35px",width:"30px"}} onClick={this.change}>2</button>
                            <button style={{height:"35px",width:"30px"}} onClick={this.change}>3</button>
                            <button style={{height:"35px",width:"30px"}} onClick={this.change}>*</button>
                        </div>
                        <div className="number3">
                            {/*第三列键盘*/}
                            <button style={{height:"35px",width:"30px"}} onClick={this.change}>4</button>
                            <button style={{height:"35px",width:"30px"}} onClick={this.change}>5</button>
                            <button style={{height:"35px",width:"30px"}} onClick={this.change}>6</button>
                            <button style={{height:"35px",width:"30px"}} onClick={this.change}>-</button>
                        </div>
                        <div className="number4">
                            {/*第四列键盘*/}
                            <button style={{height:"35px",width:"30px"}} onClick={this.change}>7</button>
                            <button style={{height:"35px",width:"30px"}} onClick={this.change}>8</button>
                            <button style={{height:"35px",width:"30px"}} onClick={this.change}>9</button>
                            <button style={{height:"35px",width:"30px"}} onClick={this.change}>+</button>
                        </div>
                        <div className="number5">
                            {/*第五列键盘*/}
                            <button style={{height:"30px",width:"30px"}} onClick={this.del}></button>
                            <button style={{height:"30px",width:"30px"}} onClick={this.change}>0</button>
                            <button style={{height:"30px",width:"30px"}} onClick={this.change}>.</button>
                            <button style={{height:"30px",width:"30px"}} onClick={this.change}> </button>
                        </div>
                    </div>
                </div>
            </div>
        );
    }

}

index.js

import React, { Component } from "react";
import Calculator from "./calculator";

export default class Index extends Component {

    render() {
        return (
            <div>
                <Calculator/>
            </div>
        );
    }
}

CSS样式:

###
.form{
    position: absolute;
    height: 400px;
    width: 230px;
    left:50%;
    top:50%;
    margin-left:-200px;
    margin-top:-200px;
    background-color: bisque;
    border-radius: 20px;

}
.ipt{
    margin-top: 25px;
    margin-bottom: 10px;
    margin-left: 10px;
    border-radius: 15px;
    width: 200px;
    height: 80px;
    color: brown;
    font-size: 20px;
    background-color: azure;
}
.number1{
    display: flex;
    width: 200px;
    justify-content:space-between;
    margin-top: 10px;
    margin-bottom: 20px;
    margin-left: 12px;
    background-color: bisque;

}
.number2{
    display: flex;
    width: 200px;
    justify-content:space-between;
    margin-top: 10px;
    margin-bottom: 22px;
    margin-left: 12px;
    background-color: bisque;
}
.number3{
    display: flex;
    width: 200px;
    justify-content:space-between;
    margin-top: 10px;
    margin-bottom: 22px;
    margin-left: 12px;
    background-color: bisque;
}
.number4{
    display: flex;
    width: 200px;
    justify-content:space-between;
    margin-top: 10px;
    margin-bottom: 22px;
    margin-left: 12px;
   background-color: bisque;
}
.number5{
    display: flex;
    width: 200px;
    justify-content:space-between;
    margin-top: 10px;
    margin-bottom: 22px;
    margin-left: 12px;
    background-color: bisque;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

react实现简单的计算器功能。 的相关文章

  • 如果对象包含在另一个数组中,则从数组中删除该对象

    我试图从数组中删除一个对象 如果该对象的属性 唯一 包含在另一个数组中 我知道我可以像这样执行嵌套 for 循环 for i 0 i lt array length i for j 0 j lt array2 length j if arr
  • 取消html5浏览器中的单图请求

    我正在动态加载 大 图像以绘制到 html5 画布中 如下所示 var t new Image t onload t src http myurl 但每隔一段时间就会想取消图片请求完全地 我想出的唯一方法是设置src to i e t sr
  • Angular 2 链式 Promise 并传递拒绝

    应该是一个简单的问题 但是我找不到有关如何做到这一点的文档 像这样链接一个承诺 Making a promise no problem let promise new Promise resolve reject gt let data d
  • 如何在ASP.NET Webform中使用Jquery表单插件?

    我遇到了这个插件 http malsup com jquery form getting started http malsup com jquery form getting started 我想知道如何在 ASP NET WebForm
  • 如何使用 JavaScript 中的值填充下拉列表?

    我在 Tridion CMS 扩展中的功能区工具栏按钮中添加了一个按钮 单击该按钮后 将显示一个弹出页面 其中包含两个下拉菜单 通过更改第一个下拉控件中的值 我应该填充第二个下拉控件的值 就我而言 我正在使用ASP drop down li
  • jquery 验证错误位置

    这看起来很简单 但我无法弄清楚 我正在使用 jquery 验证插件 我验证所有文件 但我想要的是在输入文本行中显示验证消息警报 例如在电子邮件输入中 请填写电子邮件地址 但现在它出现在所有字段下 在我的html中
  • Leaflet js虚构地图

    我是 Leaflet 的新手 我想了解如何创建完全交互式的虚构地图 我有一张图像想要转换为传单地图 该图像基本上像图表一样具有许多连接和点 我想首先将该图像转换为地图 能够将鼠标悬停在这些点上 突出显示它们并显示有关它们的信息 并且还可以在
  • 仅一页 JavaScript 应用程序

    您是否尝试过单页 Web 应用程序 即浏览器仅从服务器 获取 一页 其余部分由客户端 JavaScript 代码处理 此类 应用程序页面 的一个很好的例子是 Gmail 对于更简单的应用程序 例如博客和 CMS 使用这种方法有哪些优点和缺点
  • JavaScript 中数组的 HTML 数据列表值

    我有一个简单的程序 它必须从服务器上的文本文件中获取值 然后将数据列表填充为输入文本字段中的选择 为此 我想要采取的第一步是我想知道如何动态地将 JavaScript 数组用作数据列表选项 我的代码是
  • 未捕获的错误:找不到模块“jquery”

    我在用Electron https github com atom electron制作桌面应用程序 在我的应用程序中 我正在加载一个外部站点 Atom 应用程序之外 可以说http mydummysite index html http
  • 使用 JS 合并具有相同值的相邻 HTML 表格单元格

    我已经为此苦苦挣扎了一段时间 我有一个根据一些 JSON 数据自动生成的表 该数据可能会有所不同 我想合并第一列中具有相同值的相邻单元格 例如此表中的 鱼 和 鸟 table tr td fish td td salmon td tr tr
  • 如何使JavaScript函数在Eclipse“大纲视图”中可见?

    我有这样的代码 但如果它在匿名函数中定义 则无法打开函数大纲 类没有问题 我该如何概述something2 请分享一些提示 我可以将所有函数标记为构造函数 但这是无效的方法 start of track event required deb
  • Twitter 嵌入时间轴小部件

    我继续下载http platform twitter com widgets js http platform twitter com widgets js And the http platform twitter com embed t
  • 为什么“tbody”不设置表格的背景颜色?

    我在用 tbody 作为 CSS 选择器来设置background color在一个表中 我这样做是因为我有多个 tbody 表内的部分 它们具有不同的背景颜色 我的问题是 当使用border radius在细胞上 细胞不尊重backgro
  • Select2 下拉列表动态添加、删除和刷新项目

    这让我发疯 为什么 Select2 不能在其页面上实现清晰的方法或示例如何在 Select2 上进行简单的 CRUD 操作 我有一个 select2 从 ajax 调用获取数据
  • Nodejs mysql 获取正确的时间戳格式

    我在用着mysqljs https github com mysqljs mysql得到结果后sql我变得不同TimeStamp格式如下 created at Sat Jul 16 2016 23 52 54 GMT 0430 IRDT 但
  • 如何获取 UIWebView 中元素的位置?

    我在 iPad 程序中加载了 html 的 UIWebView 通过使用 webkit column width 我将 html 分为几列 padding 0px height 1024px webkit column gap 0px we
  • 无法在前端使用 JavaScript Fetch API 将文件上传到 FastAPI 后端

    我正在尝试弄清楚如何将图像发送到我的 API 并验证生成的token那是在header的请求 到目前为止 这就是我所处的位置 app post endreProfilbilde async def endreProfilbilde requ
  • 数据表日期范围过滤器

    如何添加日期范围过滤器 like From To 我开始进行常规搜索和分页等工作 但我不知道如何制作日期范围过滤器 我正在使用数据表 1 10 11 版本 My code var oTable function callFilesTable
  • 如何在 gulp.src 中使用基本正则表达式?

    我正在尝试选择两个文件gulp src highcharts js and highcharts src js 当然 我知道我可以使用数组表达式显式添加这两个表达式 但出于学习目的 我尝试为它们编写一个表达式 我读过可以使用简单的正则表达式

随机推荐

  • [UE4][C++]用Socket传输图片并生成UTexture2D的一些坑

    首先 我规定好数据传输的格式 char 数组 RGBARGBARGBA 主要是将RGBA四个通道的数据按一定格式和顺序写好 然后发过来接收并解析就行 然后 就是数据的接收与解析 先讲一点很少有人注意到的细节 Socket的recv函数并不是
  • 华为OD机试真题-简单的压缩算法/栈【2023Q1】

    题目描述 现需要实现一种算法 能将一组压缩字符串还原成原始字符串 还原规则如下 1 字符后面加数字N 表示重复字符N次 例如 压缩内容为A3 表示原始字符串为AAA 2 花括号中的字符串加数字N 表示花括号中的字符重复N次 例如压缩内容为
  • 区块链电子签名技术及方案

    数字签名技术是电子签名的底层核心技术 由非对称密钥加密技术和数字摘要技术构成 首先发送方利用Hash函数对文件内容进行加密并生成数字摘要 然后利用私钥对数字摘要加密形成数字签名 接收方利用发送方提供的公钥对数字签名进行解密 若解密后的数字摘
  • [编程题] 不要二

    二货小易有一个W H的网格盒子 网格的行编号为0 H 1 网格的列编号为0 W 1 每个格子至多可以放一块蛋糕 任意两块蛋糕的欧几里得距离不能等于2 对于两个格子坐标 x1 y1 x2 y2 的欧几里得距离为 x1 x2 x1 x2 y1
  • Docker简介

    1 Docker是什么 Docker 是一个开源的应用容器引擎 Docker是一个基于轻量级虚拟化技术的容器 整个项目基于Go语言开发 并采用了Apache 2 0协议 Docker可以将我们的应用程序打包封装到一个容器中 该容器包含了应用
  • 指针进阶(2)

    6 函数指针数组 数组是一个存放相同类型数据的存储空间 那我们已经学习了指针数组 比如 int arr 10 数组的每个元素是int 那要把函数的地址存到一个数组中 那这个数组就叫函数指针数组 那函数指针的数组如何定义呢 int parr1
  • PBFT算法流程

    转载原址 https my oschina net u 3620978 blog 3142775 1 系统模型 本部分介绍PBFT算法运行的系统模型 1 1 网络 PBFT工作在异步的分布式系统中 系统中各个节点彼此通过网络连接 系统运行时
  • CDN 服务器

    cdn的两种方式 推送和回源区别 DNS解析的时候 返回给最近的CDN的地址 然后应用从最近的CDN读取静态文件css js image等信息 然后如果从CDN拿不到信息的话 让请求 回源站 后端应用服务器 回源地址获取静态文件 然后返回给
  • 摆烂三年,我从普通二本到春招华为OD上岸啦

    萌妹镇楼 年前拿到的意向书 答读者问 薪资情况 定级D2 13K 2K 两个月年终奖 周六加班双倍工资 下个月发 每年一次加薪 OD转华为一次加薪 加班强度 124晚9点 35晚6点 项目紧急的话 周六会安排加班 转岗问题 因为我是读书时候
  • 数据仓库指标体系实践

    指标体系 1 痛点分析 主要从业务 技术 产品三个视角来看 业务视角 业务分析场景指标 维度不明确 频繁的需求变更和反复迭代 数据报表臃肿 数据参差不齐 用户分析具体业务问题找数据 核对确认数据成本较高 技术视角 指标定义 指标命名混乱 指
  • 入坑Java之路 - JVM、JRE、JDK详细介绍

    JVM JRE JDK详细介绍 三者关系图 JDK JDK1 8目录介绍 JRE JRE1 8目录介绍 JVM JVM体系结构 JVM执行流程 JVM运行原理 JVM空间说明 JVM参数配置 JVMGC过程 参考文献 三者关系图 官网图 架
  • LTspice仿真运放稳定性性能

    运放在电路设计中经常使用 尤其是接成跟随器的电路 百度一下 这种电路很容易查到 但是这种跟随器后面接容性负载 比如下图的C1 2 4 7uF 设计不当 就很容易造成输出信号振荡 这是由于真实放大器内部的开环阻抗在输出驱动容性负载的时候 就又
  • Python 零基础学习指南

    现在 ChatGPT 热潮 人工智能时代已来临 AI 桌面革命深夜打响 GPT 4 全面接入微软 Office 全家桶 势必颠覆人类办公 或将取代人类大多数岗位 而你还不会编程 你想成为被 AI 取代的那一个吗 Python 作为入门编程简
  • 清空select下拉框的方法

    search find option remove 或者 search empty 转载于 https www cnblogs com lxcmyf p 7065998 html
  • Latex图片横排和竖排,并在图片下方和左方添加子标题

    题外话 个人感觉本文对subfigure和minipage作了清晰的解释 认真阅读本文 图片排版应该问题不大了 首先展示了效果图 紧接着展示了效果图代码 最后对subfigure和minipage进行解释 一 效果展示 从整体来看 是二行五
  • JavaScript 关于form表单多文件上传的3种方式,

    如果是直接上传文件 可以使用这种
  • js逆向之加密方法远程调用

    js逆向之加密方法远程调用 加密方法的远程调用主要是使用了RPC协议 RPC Remote Procedure Call 是远程调用的意思 RPC的应用十分广泛 比如在分布式中的进程间通信 微服务中的节点通信 我们这里使用的rpc其实是实现
  • python机器学习案例-支持向量机建模及评估(完整代码+实现效果)

    实现功能 python机器学习案例 支持向量机建模及评估 实现代码 导入需要的库 from warnings import simplefilter simplefilter action ignore category FutureWar
  • Android Service启动流程随笔

    Android启动Service有两种方式 一种是startService 一种是bindService 下面对这两中方式的启动流程进行分析 startService的启动过程 ContextImpl到AMS的调用过程 要启动Service
  • react实现简单的计算器功能。

    简单的计算器功能 最近在学react 发现对react的掌握不是很熟练 于是就动手自己做了一个react计算器 因为计算器是最能理解生命周期的 话不多说 直接进入主题 难点 对于获取数字 React 获取 DOM 元素节点的文本内容 用e