javascript - 如何更改 React JS 中单击按钮的颜色?
问题描述
我做了一个简单的计算器,我想在点击时更改按钮的背景颜色。我想在handleClick函数中有代码,我在下面的代码中注释了我想改变颜色的地方。索引返回 +、-、* 或 /,具体取决于您单击的按钮以及单击时它会自动计算给定值并更改按钮颜色。
这是我的代码:
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Calculator</title>
<!-- REACT -->
<script src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/babel-standalone@6.15.0/babel.min.js"></script>
<style>
body {
width: 400px;
margin: auto
}
.box {
border: 1px dashed #000;
padding: 15px;
background-color: #adbed8;
}
input[type="text"] {
width: 200px;
}
button {
background-color: #069;
border-radius: 5px;
color: #fff;
margin-bottom: 5px;
margin-right: 5px;
padding: 5px 15px;
border: none;
}
</style>
</head>
<body>
<h3>Calculator</h3>
<div id="ratkaisu" class="box"></div>
<script type="text/babel">
class Nelilaskin extends React.Component {
constructor(props) {
super(props);
this.handleClick = this.handleClick.bind(this);
}
handleClick (index) {
var myElements = document.querySelectorAll("button");
// All buttons are color #069
for (var i = 0; i < myElements.length; i++) {
myElements[i].style.backgroundColor = "#069";
}
// Calculate the values
this.refs.n3.value = eval(this.refs.n1.value + index + this.refs.n2.value);
// I want to change the color here
}
render() {
return (
<div>
<table>
<tbody>
<tr><td>Luku1:</td><td><input type="text" ref="n1" /></td></tr>
<tr><td>Luku2:</td><td><input type="text" ref="n2" /></td></tr>
<tr><td>Tulos:</td><td><input type="text" ref="n3" /></td></tr>
<tr><td>Laske</td><td>
<button onClick={this.handleClick.bind(this, "+")}>+</button>
<button onClick={this.handleClick.bind(this, "-")}>-</button>
<button onClick={this.handleClick.bind(this, "*")}>*</button>
<button onClick={this.handleClick.bind(this, "/")}>/</button>
</td></tr>
</tbody>
</table>
</div>
);
}
}
ReactDOM.render(
<Nelilaskin />,
document.getElementById('ratkaisu')
);
</script>
解决方案
在状态中设置一个属性;将按钮类型设置为单击时的属性值;有条件地为每个按钮在该属性周围呈现一个类名。
class Nelilaskin extends React.Component {
constructor(props) {
super(props);
this.handleClick = this.handleClick.bind(this);
this.state = {
active: ''
}
}
handleClick(index) {
if (!this.refs.n1.value || !this.refs.n2.value) return;
// Calculate the values
this.refs.n3.value = eval(this.refs.n1.value + index + this.refs.n2.value);
// I want to change the color here
this.setState({
active: index
})
}
setActive(id) {
}
render() {
return ( <
div >
<
table >
<
tbody >
<
tr > < td > Luku1: < /td><td><input type="text" ref="n1" / > < /td></tr >
<
tr > < td > Luku2: < /td><td><input type="text" ref="n2" / > < /td></tr >
<
tr > < td > Tulos: < /td><td><input type="text" ref="n3" / > < /td></tr >
<
tr > < td > Laske < /td><td> <
button className = {
"+" === this.state.active ? "active" : ""
}
onClick = {
this.handleClick.bind(this, "+")
} > + < /button> <
button className = {
"-" === this.state.active ? "active" : ""
}
onClick = {
this.handleClick.bind(this, "-")
} > - < /button> <
button className = {
"*" === this.state.active ? "active" : ""
}
onClick = {
this.handleClick.bind(this, "*")
} > * < /button> <
button className = {
"/" === this.state.active ? "active" : ""
}
onClick = {
this.handleClick.bind(this, "/")
} > /</button >
<
/td></tr >
<
/tbody> < /
table > <
/div>
);
}
}
ReactDOM.render( <
Nelilaskin / > ,
document.getElementById('ratkaisu')
);
body {
width: 400px;
margin: auto
}
.box {
border: 1px dashed #000;
padding: 15px;
background-color: #adbed8;
}
input[type="text"] {
width: 200px;
}
button {
background-color: #069;
border-radius: 5px;
color: #fff;
margin-bottom: 5px;
margin-right: 5px;
padding: 5px 15px;
border: none;
}
.active {
background-color: red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<h3>Calculator</h3>
<div id="ratkaisu" class="box"></div>
推荐阅读
- python - Delaney三角剖分的欧几里得距离 - Scipy
- sql - SQL 错误:ORA-00936:缺少表达式 00936。00000 -“缺少表达式” *原因:*操作:
- sql - PostgreSQL UPDATE 语句将关键字视为一列
- ios - 核心数据异常 coerceValueForKeyWithDescription
- git - 在一个 repo 上设置多个 git 遥控器并设置一个默认值
- sql - 使用将值从一个表覆盖到另一个表
- kubernetes - 如何管理 Kubernetes 集群内网站的“链接转发”
- php - 如何在 1 行中减少这 5 个 preg_replaces 行?
- python - 从python中的文本文件中提取信息
- vim - 如何让vim在制表符上插入相同数量的空格?