用js/react写计算器
效果图如下
直接上代码
目录如下,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.value
-
let prvcontent = this.state.text
-
let 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 = prvcontent
-
break;
-
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 = 0
-
break;
-
default:
-
break;
-
}
-
}
-
} else if(arr2.length === 1) {
-
if(arr2[0]) {
-
if(arr2[0] === '.') {
-
content = 0
-
} else {
-
content = arr2[0]
-
}
-
}
-
}
-
break;
-
default:
-
content = prvcontent currentValue
-
break;
-
}
-
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实现一个简单计算器》,计算逻辑是自己写的,如有不足,欢迎指出。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgcbfif
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01