亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我的狀態打開了我的所有子菜單,但我只想要打開一個子菜單

我的狀態打開了我的所有子菜單,但我只想要打開一個子菜單

Cats萌萌 2022-08-18 09:59:24
我有一個左側菜單,當您單擊某個元素時,將顯示該元素的子菜單。但是對于我的實際代碼,當單擊某個元素時,會出現我的所有子菜單。我知道我的方法不對,但我不知道該怎么做:(我的示例代碼:import { useState } from 'react'export default function Menu(){ const [visibleSubCategorie, setVisibleSubCategorie] = useState(false) const Menu = [{    name: 'Homme', link : '/homme-fr', subCategory: false }, {    name: 'Femme', link : '/femme-fr', subCategory: [{        name: 'haut', link : '/femme-haut-fr'    },{        name: 'bas', link : '/femme-bas-fr'    }] },{    name: 'Enfant', link : '/enfant-fr', subCategory: [{        name: 'haut', link : '/enfant-haut-fr'    },{        name: 'bas', link : '/enfant-bas-fr'    }] }] console.log("Menu -> Menu", Menu) return(    <>    {Menu.map(item=>        <div>            {item.subCategory ?            <>                <button type="button"  onClick={() => setVisibleSubCategorie(!visibleSubCategorie)}>{item.name}</button>                {visibleSubCategorie && item.subCategory.map(subCategorys=>                    <>                        <p>{subCategorys.name}</p>                    </>                )}            </>            :            <a href={item.link}>{item.name}</a>               }        </div>    )}    </>)}``示例:當我單擊按鈕“Femme”以查看femme的子類別時,就像我也單擊了“Enfant”按鈕一樣。我可以創建一個組合體,并使使用狀態“const [visibleSubCategorie, setVisibleSubCategorie] = useState(false)”,并且這個組合體在映射內,但我知道存在另一種方法。
查看完整描述

2 回答

?
天涯盡頭無女友

TA貢獻1831條經驗 獲得超9個贊

您正在使用同一條狀態來控制所有子類別。一種可能的解決方案是將State用作每個子類別的字符串值數組。


const [visibleSubCategorie, setVisibleSubCategorie] = useState([])


setVisibleSubCategorie([...visibleSubCategorie, subCategorys.name])

然后檢查數組中是否存在該名稱,以了解是否應顯示子類別。


{visibleSubCategorie.includes(subCategorys.name) && item.subCategory.map(subCategorys=>

然后,您必須在關閉時從數組中刪除該項目。


查看完整回答
反對 回復 2022-08-18
?
ITMISS

TA貢獻1871條經驗 獲得超8個贊

您可以使用類似于@Kyler建議的方法解決此問題。

我建議使用HOC,如下所示:

const setOpen = (setOpen, opened) => () => setOpen(!opened);

然后在你的JSX中:

onClick={setOpen(setVisibleSubCategorie, visibleSubCategorie)}

請注意,為了使此功能正常工作,您必須為每個部分提供狀態。


查看完整回答
反對 回復 2022-08-18
  • 2 回答
  • 0 關注
  • 118 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號