[英]How to toggle class to each li element in React.js?
單擊子按鈕時如何將 class 切換到父li
元素。
li
元素也是動態項。
這是我到目前為止嘗試過的
export default function About() {
const [show, setShow] = React.useState();
return (
<ul className="list">
<li className={`list-item ${show ? "on" : ""}`} >
<button onClick={() => setShow(!show)}>
Toggle
</button>
</li>
<li className={`list-item ${show ? "on" : ""}`} >
<button onClick={() => setShow(!show)}>
Toggle
</button>
</li>
</ul>
);
}
問題是當單擊按鈕時,所有li
一起切換。 我希望他們單獨切換。
請幫忙。
看起來您有 1 個變量show
來跟蹤N
個<li>
的 state。 你看到問題了嗎?
如果每個<li>
都需要有自己的 state,這可能是一個好兆頭,您需要創建一個新組件,也許是<ListItem />
? 這樣,每個<ListItem />
都會有自己的useState
掛鈎來處理 state 更改。
function About() {
return (
<ul className="list">
<ListItem />
<ListItem />
</ul>
);
}
function ListItem() {
const [show, setShow] = React.useState(false);
return (
<li className={`list-item ${show ? "on" : ""}`}>
<button onClick={() => setShow(prev => !prev)}>Toggle</button>
</li>
);
}
也許你可以試試列表?
export default function About() {
const [activeId, setActiveId] = React.useState(null);
const list = ['Toggle', 'Toggle']
const onBtnClick = (index) => {
if (activeId === index) {
setActiveId(null)
} else {
setActiveId(index)
}
}
return (
<ul className="list">
{list.map((item, idx) => (
<li key={idx} className={`list-item ${activeId === idx ? "on" : ""}`} >
<button onClick={() => onBtnClick(idx)}>
{item}
</button>
</li>
))}
</ul>
);
}
如果您希望它們單獨切換,則需要兩個單獨的show
state 變量。
嘗試這個:
export default function About() {
const [showA, setShowA] = React.useState();
const [showB, setShowB] = React.useState();
return (
<ul className="list">
<li className={`list-item ${showA ? "on" : ""}`} >
<button onClick={() => setShowA((orig) => !orig)}>
Toggle
</button>
</li>
<li className={`list-item ${showB ? "on" : ""}`} >
<button onClick={() => setShowB((orig) => !orig)}>
Toggle
</button>
</li>
</ul>
);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.