2 回答

TA貢獻1812條經驗 獲得超5個贊
isActive第一個選項 -為每個元素引入屬性
我將在每個項目items的active屬性中引入并根據單擊的項目來操作它們。需要將其添加到useState您可以使用 更新isActive屬性的位置.map()。
類似如下:
const [items, setItems] = useState([
{ name: 'Item 1', isActive: true },
{ name: 'Item 2', isActive: false },
{ name: 'Item 3', isActive: false }
]);
handleClick = (index) => {
setItems(prevItems =>
prevItems.map((e, i) => ({...e, isActive: i === index}))
);
}
const list = items.map( (item, index) => {
return(
<li
key={index}
onClick={() => handleClick(index)}
className={item.isActive ? 'active' : null}
>
{item.name}
</li>
)
})
return {
<>
<ul>{list}</ul>
</>
}
第二個選項 - 存儲index單擊的活動元素
為單擊的元素存儲index有助于您識別.map()哪個是活動元素。因此,通過簡單的檢查,i === index您可以向元素添加active類。<li>
index您可以為with創建一個狀態,useState如下所示:
const [index, setIndex] = useState(0);
const items = [
{ name: 'Item 1' },
{ name: 'Item 2' },
{ name: 'Item 3' }
];
handleClick = (i) => {
setIndex(i);
}
const list = items.map( (item, i) => {
return(
<li
key={i}
onClick={() => handleClick(i)}
className={i === index ? 'active' : null}
>
{item.name}
</li>
)
})
return {
<>
<ul>{list}</ul>
</>
}
我希望這有幫助!

TA貢獻1878條經驗 獲得超4個贊
添加了內聯評論。
const App = () => {
// active is active item, initially '' means, nothing selected.
const [active, setActive] = useState("");
const items = [{ name: "Item 1" }, { name: "Item 2" }, { name: "Item 3" }];
const list = items.map(({ name }) => (
<li
key={name /* avoid using index for key */}
onClick={() => setActive(name)}
className={active === name ? "active" : ""}
>
{name}
</li>
));
// return the Element, not {}
return (
<>
<ul>{list}</ul>
</>
);
};
export default App;
添加回答
舉報