3 回答

TA貢獻1842條經(jīng)驗 獲得超13個贊
您的問題是您正在設(shè)置一個本地狀態(tài)來控制它是否應(yīng)該打開,但然后檢查單擊項目的道具。
更改這一行:
// I removed props from props.itemClicked
<Menu.ItemIcon id={index} style={{ right: "0px", position: "absolute" }} className={itemClicked === index && item.children ? 'rotate' : ''}>

TA貢獻1810條經(jīng)驗 獲得超5個贊
您應(yīng)該使用組件的狀態(tài)來檢查菜單項是否打開。另外,我刪除了不必要的depth狀態(tài)。希望這能有所幫助。
const StackedMenu = ({items, depth, ...otherProps}) => {
let [chevronRotation, setChevronRotation] = useState('');
let [itemClicked, setItemClicked] = useState(otherProps.itemClicked);
return (
<Menu
primary
defaultActiveIndex={0}
activeIndex={itemClicked}
vertical
pointing
style={{width: '100%'}}>
{items.map((item, index) => {
return (
<>
<MenuItem
onClick={(e, data) => {
setItemClicked(data.index);
setChevronRotation(`rotate`);
}}
index={index}
key={index}
pointing="start">
<Menu.ItemContent
style={depth > 0 ? {paddingLeft: '0.5em'} : null}>
{item.content}
</Menu.ItemContent>
{item.children ? (
<Menu.ItemIcon
id={index}
style={{right: '0px', position: 'absolute'}}
className={itemClicked === index ? 'rotate' : ''}>
<ChevronEndMediumIcon />
</Menu.ItemIcon>
) : null}
</MenuItem>
{itemClicked === index && item.children ? (
<div>
<StackedMenu
items={item.children}
depth={depth + 1}
itemClicked={0}
/>
</div>
) : null}
</>
);
})}
</Menu>
);
};

TA貢獻1942條經(jīng)驗 獲得超3個贊
使用“代碼分割”。只需創(chuàng)建一個單獨的組件并將狀態(tài)放置在該組件內(nèi)即可。這會為列表中的每個項目創(chuàng)建一個單獨的狀態(tài),以便 onclick 僅遵循該項目。
<div>
<Mycomponent />
</div>
const Mycomponent = ()=>{
const [active, setactive] = useState(false);
return (
<div>
<div
key={i}
style={{
boxShadow: active
? "4px 3px 8px 0px rgba(1, 156, 48, 0.3)"
: "initial"
}}
onClick={() => setactive(!active)}
>
{message.content}
</div>
<div>
);
添加回答
舉報