在动态创建的按钮上用颜色填充活动按钮
Fill active button with color on buttions that are dynamically created
我想让一个按钮在按下时显示为活动状态,问题是我该如何处理动态创建的按钮?
目前我的设置是这样的:
<Grid container sx={{ padding: "10px" }}>
{Object.values(CATEGORIES).map((c) => {
return (
<Button className="category-btn" onClick={() => handleChange(c)}>
{c.title}
</Button>
);
})}
</Grid>
由于按钮是动态生成的,所以我不确定如何添加功能。我目前已经尝试过这个答案。
如果 CATEGORIES 对象没有 ID,映射函数还会为您提供数组中的索引,您可以跟踪该索引以发现哪个按钮应该处于活动状态。
如果您只能激活一个按钮:
const [activeButtonIndex, setActiveButtonIndex] = useState(null)
const handleChange = (c,index) => {
setActiveButtonIndex(index)
}
...
<Grid container sx={{ padding: "10px" }}>
{Object.values(CATEGORIES).map((c,index) => {
return (
<Button className={index === activeButtonIndex ? "category-btn-active" : "category-btn"} onClick={() => handleChange(c,index)}>
{c.title}
</Button>
);
})}
</Grid>
如果您可以激活多个按钮,您可以:
const [activeButtonIndexList, setActiveButtonIndexList] = useState([])
const handleChange = (c,index) => {
setActiveButtonIndexList([...activeButtonIndexList, index])
}
...
<Grid container sx={{ padding: "10px" }}>
{Object.values(CATEGORIES).map((c,index) => {
return (
<Button className={activeButtonIndexList.includes(index) ? "category-btn-active" : "category-btn"} onClick={() => handleChange(c,index)}>
{c.title}
</Button>
);
})}
</Grid>
我想让一个按钮在按下时显示为活动状态,问题是我该如何处理动态创建的按钮?
目前我的设置是这样的:
<Grid container sx={{ padding: "10px" }}>
{Object.values(CATEGORIES).map((c) => {
return (
<Button className="category-btn" onClick={() => handleChange(c)}>
{c.title}
</Button>
);
})}
</Grid>
由于按钮是动态生成的,所以我不确定如何添加功能。我目前已经尝试过这个答案。
如果 CATEGORIES 对象没有 ID,映射函数还会为您提供数组中的索引,您可以跟踪该索引以发现哪个按钮应该处于活动状态。
如果您只能激活一个按钮:
const [activeButtonIndex, setActiveButtonIndex] = useState(null)
const handleChange = (c,index) => {
setActiveButtonIndex(index)
}
...
<Grid container sx={{ padding: "10px" }}>
{Object.values(CATEGORIES).map((c,index) => {
return (
<Button className={index === activeButtonIndex ? "category-btn-active" : "category-btn"} onClick={() => handleChange(c,index)}>
{c.title}
</Button>
);
})}
</Grid>
如果您可以激活多个按钮,您可以:
const [activeButtonIndexList, setActiveButtonIndexList] = useState([])
const handleChange = (c,index) => {
setActiveButtonIndexList([...activeButtonIndexList, index])
}
...
<Grid container sx={{ padding: "10px" }}>
{Object.values(CATEGORIES).map((c,index) => {
return (
<Button className={activeButtonIndexList.includes(index) ? "category-btn-active" : "category-btn"} onClick={() => handleChange(c,index)}>
{c.title}
</Button>
);
})}
</Grid>