javascript - ReactJS当我使用任何handleClick时,其他handleClicks会触发
问题描述
我试图建立一个猜数字游戏。我写了一个按钮来猜测一个数字,一个按钮来生成一个随机数,以及一个按钮来比较猜测的数字和生成的数字。当我单击猜测数字按钮时,将触发 handleClickCompare 方法,并在其中获取 console.log。每次触发 handleChange 时,handleClickCompare 也会触发。有时但不是每次当我按下猜测按钮时都会生成一个新的随机数。到底是怎么回事?
import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';
class App extends Component {
constructor(props){
super(props);
this.state={ guess:0, gen:0 }
}
handleChange(guess, e) {
this.setState({guess: e.target.value});
console.log(this.state);
}
// handleChange(guess, event) {
// this.setState([guess]: event.target.value);
// console.log(this.state);
// }
handleClick(guess, e) {
this.setState({ guess: e.target.value });
console.log(this.state);
}
handleClickGen(gen,e){
this.setState({gen: Math.floor(Math.random()*10)});
console.log(this.state);
}
handleClickCompare(guess, gen) {
if (gen<guess) {
console.log("guess lower");
}
if (guess < gen) {
console.log("guess higher");
}else {
console.log("You got it chief");
}
}
render() {
return (
<div className="App">
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<h1 className="App-title">Welcome to React</h1>
</header>
<p className="App-intro">
Enter a number
</p>
<input
value={this.state.guess}
onChange={this.handleChange.bind(this, "guess")}
type="number"
/>
{/* <input name={guess} onChange={event => this.handleChange(event)} /> */}
{/* <input type="text" name="guess" value={this.state.title}
onChange={this.handleChange.bind(this)}/> */}
<button type="button"
onClick={this.handleClick.bind(this, "guess")}>
guess{" "}
</button>
<button type="button"
onClick={this.handleClickGen.bind(this, "gen")}>
gen a number{" "}
</button>
<button type="button"
onClick={this.handleClickCompare(this.state.guess, this.state.gen)}>
compare{" "}
</button>
</div>
);
}
}
export default App;
>
解决方案
您编写 onClick 处理程序的方式会在每次呈现组件时运行,而不仅仅是 onClick。
例如,您应该编写如下:
onClick={() => this.handleClick.bind(this, "guess")}>
根据您的正确评论进行了更新:最后一个处理程序中缺少绑定。
推荐阅读
- debugging - VS Code:在自定义容器中启动调试器
- c++ - 宏定义中的 C++ lambda 函数
- sql - 如何在运行相同查询之前删除所有临时表?
- javascript - 打字稿定义中的 lib dom 接口上不存在事件目标
- java - 矩阵求逆时吸收马尔可夫链产生错误输出
- authentication - 在 .NET Core API 上使用 OpenID access_token
- java - ("(?i)[^aeiou]", "") 如何在字符串中查找元音?
- kubernetes - 如何启用/禁用 kubernetes 调度程序插件?
- sql - 数乘以常数得到负数
- python - Django 提高 'django.urls.exceptions.NoReverseMatch: 找不到'/' 的反向。“/”不是有效的视图函数或模式名称。在 base.html 中