IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> react实现简单的计算器功能。 -> 正文阅读

[JavaScript知识库]react实现简单的计算器功能。

简单的计算器功能。

最近在学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;
}
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-01 23:16:14  更:2022-04-01 23:16:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:50:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码