【发布时间】:2020-03-17 17:21:29
【问题描述】:
我用 React JS 做了简单的计算器。所有功能都运行良好,但我需要实现这两个我遇到麻烦的功能:
1) 当点击操作符(+或-)时,如果再次点击操作符,则操作符应该被替换。例如,如果用户单击 +,则在该用户单击 - 之后,然后进行减法运算 将执行而不是添加
2) 应执行操作顺序。例如,如果用户输入 5 然后 + 和 然后是 4,然后是 -,它应该计算 5+4 并在文本框/标签中显示 9
如果链接在这里不起作用是我的代码
import React from "react"
import "./style.css"
import "./App.css"
class Layout extends React.Component{
constructor(){
super()
this.state ={
text: "",
result: [],
prevResult: []
}
this.handleChange = this.handleChange.bind(this)
this.calculate = this.calculate.bind(this)
this.back = this.back.bind(this)
}
handleChange(event){
const {name, value, type, checked} = event.target
this.setState({[name]: value})
}
calculate(event){
this.setState((prevState) => ({
text: (eval(this.state.text) || "" ) + "",
result: [...prevState.result, this.state.text + " " ],
prevResult: [...prevState.prevResult, + (eval(this.state.text) || "" ) + " " ]
})
)
}
back(event){
const {name, value, type, checked} = event.target
type === "abc" ? this.setState({text: this.state.text.slice(0, -1)}) : this.setState({text: ""})
}
render(){
return(
<div >
<div className= "resultbar">
<input style= {{height: "30px", width: "200px", font: "20px" }}
name="text"
autoFocus="autofocus"
value={this.state.text}
onChange = {this.handleChange}
/>
</div>
<div className= "history">
<h2>History</h2>
<h3 style= {{color: "red" }}>{this.state.result} </h3>
<p>{this.state.prevResult}</p>
</div>
<div className="button">
<button
name= "text"
value = {this.state.text + "+"}
onClick= {this.handleChange}>+</button>
<button
name= "text"
value = {this.state.text + "-"}
onClick= {this.handleChange}>-</button>
<button
type= "adbc"
name= "text"
value = {this.state.text + "*"}
onClick= {this.handleChange}>*</button>
<button
name= "text"
value = {this.state.text + "/"}
onClick= {this.handleChange}>/</button>
<button
name= "text"
value = {this.state.text + "%"}
onClick= {this.handleChange}>%</button>
<button
name= "text"
value = {this.state.text + "("}
onClick= {this.handleChange}>(</button>
<button
name= "text"
value = {this.state.text + ")"}
onClick= {this.handleChange}>)</button>
<button
name= "text"
type= "dbac"
value= {this.state.text}
onClick = {this.calculate}>=</button>
<button
name= "text"
value = {this.state.text + "1"}
onClick= {this.handleChange}>1</button>
<button
name= "text"
value = {this.state.text + "2"}
onClick= {this.handleChange}>2</button>
<button
name= "text"
value = {this.state.text + "3"}
onClick= {this.handleChange}>3</button>
<button
name= "backspace"
onClick = {() => this.setState({
text: this.state.text.slice(0, -1)
})}> Ce</button>
<button
name= "text"
value = {this.state.text + "4"}
onClick= {this.handleChange}>4</button>
<button
name= "text"
value = {this.state.text + "5"}
onClick= {this.handleChange}>5</button>
<button
name= "text"
value = {this.state.text + "6"}
onClick= {this.handleChange}>6</button>
<button
name= "text"
type= "abc"
onClick = {this.back}
>C</button>
<button
name= "text"
value = {this.state.text + "7"}
onClick= {this.handleChange}>7</button>
<button
name= "text"
value = {this.state.text + "8"}
onClick= {this.handleChange}>8</button>
<button
name= "text"
value = {this.state.text + "9"}
onClick= {this.handleChange}>9</button>
<button
name= "backspace"
onClick = {() => this.setState({
text: this.state.text.slice(0, -1)
})}> ~</button>
<button
name= "text"
value = {this.state.text + "."}
onClick= {this.handleChange}>.</button>
<button
name= "text"
value = {this.state.text + "0"}
onClick= {this.handleChange}>0</button>
</div>
</div>
)
}
}
export default Layout
【问题讨论】:
标签: javascript reactjs