reactjs - 事件处理 - 反应
问题描述
我有一个popover
里面有Colors
不同颜色的组件。还有一个图标 DoneIcon
(暂时)放置在Colors
组件内。我想要实现的是:
- 当我选择一种颜色(里面没有图标)悬停后,
DoneIcon
应该放在里面。为了概括选择颜色时,它应该具有DoneIcon
并且图标应该从先前选择的颜色中消失。 - 选择颜色时,(其父级)的背景颜色
div
应class="box"
更改为所选颜色。我知道这可以通过事件处理来实现,方法是为将要执行的每种颜色(共 12 种颜色)设置函数onClick
,但是我如何才能只有一个函数从事件执行props.color
时检测颜色onClick
并将颜色应用于box
.
解决方案
将选定的道具添加到您的颜色组件
function Colors(props) {
return (
<div
onClick={props.setColor(props.color)}
className="colors"
style={{ backgroundColor: props.color }}
>
{props.selected && <DoneIcon fontSize="small" />}
</div>
);
}
在你的父母中:
const [color, setColor] = useState("");
...
<Colors selected={color === "red"} setColor={setColor} color="red" />
注意:你可能想要重构这个解决方案,但是这样的东西应该可以工作。
关于重构的思考
映射颜色列表
const [selectedColor, setSelectedColor] = useState('')
['red', 'blue', 'green'].map(color => {
<div onClick={() => setSelectedColor(color)} className="colors" style={{ backgroundColor: color }}>
{selectedColor === color && <DoneIcon fontSize="small" />}
</div>
}
工作:codesandbox
重构为使用颜色组件:codesandbox
推荐阅读
- typescript - 松式安全或不松式安全
- windows - 如何避免vim在windows中创建额外的文件
- angular - 向邮箱发送消息
- angular - Angular HttpTestingController 找不到匹配项
- java - 方面没有被调用
- java - 无法从 Java 中的其他类调用方法
- sql - SQL Group By Query 以所需格式返回输出
- asp.net-core - 在 Asp.Net Core 应用程序中从 Azure Ad 登录获取用户的电子邮件
- api - 未找到航班最便宜日期搜索 API 的价格结果
- android - 带有按钮单击和滚动的水平页面交换 - Flutter