javascript - 如何仅将类添加到 React 中特定单击的元素?
问题描述
我循环一个对象并显示 li 标签并附加一个点击处理程序。
下面是一个显示更多信息的游戏组件。
有人可以帮助我了解我的逻辑以及如何告诉 React 仅将类添加到与单击相关的特定组件中。在
目前,当我单击一个元素时,以下所有游戏组件会同时打开。我只想打开下面的那个。
库组件
class Library extends React.Component {
state = {
active: false
};
toggleClass = index => {
let active = this.state.active;
active = !active;
this.setState({ active });
};
render() {
return (
<section>
<h2>Game Library</h2>
<ul>
{this.props.games.map((game, index) => (
<Fragment key={`${index}-${game.name}`}>
<li
key={`${index}-${game.gameId}`}
onClick={() => this.toggleClass(index)}
>
{game.name}
</li>
<Game
key={index}
index={index}
game={this.props.games[index]}
active={this.state.active}
/>
</Fragment>
))}
</ul>
</section>
);
}
}
游戏组件
class Game extends React.Component {
render() {
return (
<div
key={this.props.index}
className={this.props.active ? "show" : "hide"}
>
<p>{this.props.game.name}</p>
<p>{this.props.game.gameId}</p>
<a>Close</a>
</div>
);
}
}
解决方案
active
除了为 each 使用布尔值game
外,您还可以为 each 使用一个带有一个键的对象,以index
指示该特定游戏是否处于活动状态。
例子
class Library extends React.Component {
state = {
active: {}
};
toggleClass = index => {
this.setState(previousState => {
const active = { ...previousState.active };
active[index] = !active[index];
return { active };
});
};
render() {
return (
<section>
<h2>Game Library</h2>
<ul>
{this.props.games.map((game, index) => (
<Fragment key={`${index}-${game.name}`}>
<li
key={`${index}-${game.gameId}`}
onClick={() => this.toggleClass(index)}
>
{game.name}
</li>
<Game
key={index}
index={index}
game={game}
active={this.state.active[index]}
/>
</Fragment>
))}
</ul>
</section>
);
}
}
推荐阅读
- javascript - 带有 R Shiny Inputs 和 Google Analytics 的事件跟踪器
- jquery - 多选复选框
- haxe - Haxe 4:宏中未捕获的异常
- node.js - 无法识别 npm 全局安装 (gulp)
- node.js - nodeJs .save() 没有在我的数据库中保存数据
- android - RxJava 风格的 LiveData TestObserver 和测试扩展因 NullPointerException 而失败
- javascript - 如何从 Js for 循环中只得到一个结果?
- arrays - 试图获取数组中结构的值
- html - 如何在输入框中将输入限制为仅数字?
- oracle - Oracle:是否可以仅在重复出现时才过滤掉它们?