我正在做一个基于 JS 的计算器应用程序。我在一个特定部分面临问题,其中我有一个元素 displayTop 用于显示计算器的整个操作。问题出现了,如果我有一个以符号(+、-、*、/)结尾的表达式,那么按下另一个符号必须更新表达式以以该特定符号结尾。所以我使用了替换功能,即使它暂时更新了显示中的值,console.log 仍然保持不变。
这是我的代码:
import React from "react";
import logo from "./logo.svg";
import "./App.css";
import Button from "./Button.js";
class App extends React.Component {
constructor() {
super();
this.state = {
displayTop: 0,
displayBot: 0,
value: "Final Value",
};
this.handleClick = this.handleClick.bind(this);
}
handleClick = (id, name) => {
if (this.state.displayBot == 0 && name != "AC") {
this.setState({
displayTop: name,
displayBot: name,
});
} else if (name == "AC") {
this.setState({
displayTop: 0,
displayBot: 0,
});
} else if (
this.state.displayBot == "+" ||
this.state.displayBot == "-" ||
this.state.displayBot == "*" ||
this.state.displayBot == "/"
) {
this.setState({
displayBot: name,
});
if (
this.state.displayTop.endsWith("+") == true ||
this.state.displayTop.endsWith("-") == true ||
this.state.displayTop.endsWith("*") == true ||
this.state.displayTop.endsWith("/") == true
) {
现在这是出现问题的地方:
if (name == "+" || name == "-" || name == "*" || name == "/")
console.log("ends with symbol");
this.setState({
displayTop: this.state.displayTop.replace(/.$/, name),
});
console.log(this.state.displayTop);
concole.log 仍然显示以前的值。
}
} else {
this.setState({
displayTop: this.state.displayTop + name,
});
switch (name) {
case "+":
case "-":
case "*":
case "/":
this.setState({ displayBot: name });
break;
case "=":
this.setState({ displayBot: this.state.value });
this.setState({
displayTop: this.state.displayTop + name + this.state.value,
});
break;
default:
this.setState({ displayBot: this.state.displayBot + name });
}
}
};
render() {
return (
<div id="container">
<div id="displayTop">{this.state.displayTop}</div>
<div id="display">{this.state.displayBot}</div>
<Button onClick={this.handleClick} />
</div>
);
}
}
export default App;