javascript - 反应包装组中元素的更改样式
问题描述
我想更改组中元素的样式。我尝试使用 state/setState 但它会导致更改组中所有元素的样式。
{hasResults &&
stockList.map((item, index) => (
<div
onClick={(x) => this.selectItem(item)}
className={isClicked?"stockItem":"stockItemClicked"}
key={index}
>
<img src={item.src.tiny} alt="" />
</div>
))}
onClicked 函数是:
selectItem = (x) => {
if (window.innerWidth < 1200) {
this.props.onClick(x);
} else {
x.className = "stockItemSelect";
this.setState({
isClicked: true,
});
}
//
};
如何仅更改一个元素的样式。谢谢 :D
解决方案
您可以创建一个状态变量clickedItem
(最初为 null),然后单击任何项目将该项目设置clickedItem
为
this.setState({
clickedItem: item,
});
在应用类名render
时map
,您可以检查是否item
===clickedItem
并应用相应的类名。
{hasResults &&
stockList.map((item, index) => (
<div
onClick={(x) => this.selectItem(item)}
className={item===state.clickedItem?"stockItemClicked":"stockItem"}
key={index}
>
<img src={item.src.tiny} alt="" />
</div>
))}
如果item
是一个对象,请为每个对象分配一些唯一属性,例如 Id ,您可以检查item.Id===state.clickedItem.Id
推荐阅读
- python - Numpy 多维数组
- reactjs - 在 useEffect 内的条件下反应设置状态
- flutter - 如何在一段时间后自动获取重复出现的通知?
- arrays - VBA for 循环负步长,k,调用数组(k+1)。它会做什么?
- python - 如何使用 Selenium 通过“data-ng-click”属性单击元素
- linux - 循环内的bash多个if语句不起作用
- swift - 如何在 Xcode 的 MacOS 应用程序的加载窗口中添加丰富的文档内容文本视图?
- nginx - 了解 Kubernetes 上的 Airflow 和 Nginx 反向代理配置
- rest - 将数据/文件流式传输到 REST 服务。巨大的文件/附件
- php - 是否可以将 php 中的类别名列表作为数组获取?