Обе функции при нажатии изменяют одну и ту же переменную состояния, userClick
. Если вы хотите, чтобы 2 пролета действовали независимо, вам понадобятся две переменные состояния, например:
handleChange(e) {
alert(`You selected... ${e.target.textContent}`);
this.setState({
firstSpanClick: !this.state.firstSpanClick
});
}
handleChange1(e) {
alert(`You selected... ${e.target.textContent}`);
this.setState({
secondSpanClick: !this.state.secondSpanClick
});
}
<span onClick={this.handleChange1} className={this.state.firstSpanClick ? "youClicked" : "unClicked"}> Virtual</span>
<span onClick={this.handleChange2} className={this.state.secondSpanClick ? "youClicked" : "unClicked"}> Virtual</span>
Более чистым способом достижения того же результата было бы присвоение имен отрезкам с одним handleChange
.
//Each toggle variable doesn't need to be initialised, this is just for demonstration.
this.state = {
spanOne: false,
spanTwo: false
}
handleChange = (e) => {
let name = e.target.getAttribute('name');
this.setState({
[name]: !this.state[name]
});
};
<span onClick={this.handleChange} name={'spanOne'} className={this.state.spanOne ? "youClicked" : "unClicked"}> Virtual</span>
<span onClick={this.handleChange} name={'spanTwo'} className={this.state.spanTwo ? "youClicked" : "unClicked"}> Virtual</span>